在onclick事件中判断所点击的链接是打开新窗口还是新标签页。

9

大多数现代浏览器都支持使用ctrl+clickcommand+click等命令在新标签页或新窗口中打开链接。

在应用程序中,我希望链接在点击后被禁用。但是,仅当目标是同一窗口时(如果它例如在新标签页中打开,我不希望链接变为禁用状态,因为有点击它的合理性)。

我尝试了一些方法并调试了在单击时创建的事件对象 - 但我找不到任何关于目标是新标签页还是新窗口的信息。

已知的解决方法:当然可以检查是否在单击特定链接时按下某个键,这很容易 - 但由于这些命令因浏览器和操作系统而异,所以必须定义一个复杂的映射,而且谁知道用户配置了什么。

有没有可靠的方法确定位置应该在新标签页中还是新窗口中打开?

3个回答

5
这里有一个可工作的示例:http://jsfiddle.net/pioul/eCuNU/4/ 该脚本只允许在链接使用target="_blank"属性打开新标签页或窗口时才可点击。 HTML:
<a href="http://google.fr" target="_blank">new window</a>
<a href="http://google.fr" target="_self">same window 1</a>
<a href="http://google.fr" target="">same window 2</a>

jQuery:

$("a").bind("click", function(e){
    if($(this).attr("target") != "_blank"){
        e.preventDefault();
    }
});

编辑:

您可以像这样考虑ctrl +单击:

$("a").bind("click", function(e){
    if($(this).attr("target") != "_blank"){
        if(!e.ctrlKey){
            e.preventDefault();
        }
    }
});

1
嗯,这仅适用于固定目标属性。 如果用户通过按住Ctrl(或类似键)来“覆盖”它,则属性当然不会更改,因此无法确定。 - sudoremo
1
我编辑了我的回答以匹配你所讨论的情况,我猜想除了尝试在代码中检测出用户可能打开链接的每一种方式,没有其他解决方案了。 - aaaaaa

0

你无法阻止浏览器在新标签页或窗口中打开链接。可能存在(无法检测到的)配置设置强制执行此操作,或者考虑鼠标手势:在Opera中,右键单击并向下移动将在新标签页中打开一个新选项卡,我想这是无法检测到的。

此外,强制浏览器在新窗口中打开选项卡(target="_blank"甚至window.open)被认为是不好的风格。您应该让用户选择他想要做什么。如果您真的想这样做,您还可以考虑使用window.onunload,这应该在大多数情况下都有效。


好的,这与防止或强制任何事情无关 - 它只是关于检测链接是否会在新窗口中打开 - 仅此而已。 - sudoremo

0
有时浏览器设置会在新标签页或同一窗口中打开链接。
您可以检查链接对象的目标属性。
<a href="http://your_link_to_page" target="_blank" >This open in new window</a>

使用JavaScript在页面加载时操作锚点标签,并检查目标属性。如果目标值设置为_blank,则启用它们,或者您可以在用户单击链接时执行此检查。
您可以使用机制来查找在单击链接时是否按下了CTRL键。有一些资源,例如this。您可以构建一个系统。
注意:如果您正在使用JQuery,请使用不同的类别对需要进行检查的链接进行分类。并在准备就绪状态或单击链接时禁用它们。

不幸的是,如果用户通过按住“ctrl”强制打开一个新标签页,这仍然不适用,对吗? - sudoremo
你需要首先检测鼠标按下事件发生时按下了哪些键。这个检查必须在全局范围内进行(即在页面范围内)。根据按键按下设置一个JS变量。然后在点击事件中进行其余的检查。 - Shantha Kumara

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