禁用按住链接打开新窗口或新标签页

4

感谢您阅读此文章并花费时间。让我们直接进入主题!

我目前正在尝试禁用一个功能,即用户不能通过按住链接来打开新窗口或标签页。

如果您有任何建议或解决此问题的答案,我们将不胜感激, 再次感谢!


5
不应试图覆盖用户的期望。如果用户想要在新标签页中打开链接,那么你应该假设用户有自己的原因这样做。 - Jordan Running
4个回答

6
您可以将事件处理程序绑定到所需的链接元素,并使用jQuery的.preventDefault()方法取消链接的跳转。您的代码应该像这样:
```javascript $('a').on('click', function(event) { event.preventDefault(); // Your code here }); ```
$('a').click(function(event){
  event.preventDefault();
});

3
如果您需要防止用户在单独的选项卡或窗口中打开链接,那么您的网站设计可能有问题。为什么您觉得这种限制是必要的呢?
但是为了回答您的问题 - 一种比较可靠的方法是将每个“链接”实际上设置为一个表单按钮:<form method="GET" action="http://example.com/..."><input type="submit" value="click here for more information" class="pseudo-link-input" /></form>,并应用大量的 CSS 样式使该按钮看起来像一个链接。
注意事项:
- 这对于用户来说是非常不友好的! - 如果您的任何链接指向带查询字符串的页面,则必须将这些查询字符串转换为 <input type="hidden".../> 元素(这需要查询字符串能够由 HTML 表单构造)。 - 在技术上,浏览器也可能会给用户在新窗口中打开表单结果的选项,但实际上我不知道有哪些浏览器这样做。 - 当然,在他们点击链接并且页面出现在历史记录中后,他们可以在任何选项卡/窗口中访问该 URL。一些浏览器,如 Firefox,甚至允许用户在新标签页中打开“返回”或“前进”,因此这不需要太多的努力。 - 至少在某些浏览器中,这也会防止用户选择和复制链接文本。如果他们复制页面文本,则所有链接文本都有可能被静默删除。 - 它可能还会引起各种其他问题。(绕过基本浏览器功能从来不是一个好主意。)上述注意事项只是我能想到的第一批内容。

如果你正在制作一个浏览器游戏,不希望用户能够在新标签页中打开内容,那么你就需要这个功能,因为它是一个单标签页游戏。 - Gigala
这是一个在浏览器中玩的游戏(不是德语:D),有时它们可以在不打开新网站的情况下工作,主要使用单个网站上的JavaScript。 - Gigala
@Gigala:耸肩 我从来没听说过这个词;谷歌搜索结果都是德语的;合成词的风格更像德语而不是英语;虽然“browser”(浏览器)和“game”(游戏)两个单词都是英语,但听起来像是外语中那种假英语(比如德语中的“Handy”表示手机)。但无论使用哪种语言——我都不记得曾经看到过类似你描述的东西。我遇到过很多可以称为“浏览器游戏”的东西,但没有一个依赖于需要在同一标签页打开的常规HTML链接。 - ruakh

0

CSS:

a{
   color: blue;
   cursor: pointer;
   text-decoration: underline;
 }

脚本:

var links = document.getElementsByTagName("a");
for(var i=0; i < links.length; i++){
    links[i].setAttribute("data-href", links[i].getAttribute("href"));
    links[i].removeAttribute("href");
    links[i].onclick = function(){
        window.location = this.getAttribute("data-href");
    };
}

1
请考虑编辑您的帖子,添加更多关于代码的解释以及为什么它可以解决问题的说明。一个主要只包含代码的答案(即使它是有效的)通常不会帮助提问者理解他们的问题。 - SuperBiasedMan

0

你可能需要使用一些JavaScript将新内容加载到现有页面中。但这意味着您的网站将没有任何历史记录(除非您手动添加它),因此它会破坏导航,并且无法保证用户只是将URL复制并粘贴到新窗口或选项卡中。

本质上,如果您需要禁用基本操作系统(是的,对于网站来说,浏览器就是操作系统)操作,那么您正在做错事。(在您的设计或预期行为方面。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接