确定点击链接是否意味着打开新窗口或选项卡

时间:2011-12-01 15:22:19

标签: javascript hyperlink tabs click target

大多数现代浏览器支持命令ctrl+clickcommand+click或类似于新标签页或新窗口中的打开链接。

在应用程序中,我希望链接在单击时被禁用。但只是,如果目标是同一个窗口(例如,如果它在新选项卡中打开,我不希望该链接被禁用,因为再次单击它是合理的。)

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

已知的解决方法:当然可以在单击特定链接时检查是否按下了某个键,这很简单 - 但由于这些命令因浏览器和操作系统而异,因此需要定义一个复杂的映射,确切地指出了用户配置的内容等等。

是否有可靠的方法来确定是否应在新标签页或窗口中打开位置?

3 个答案:

答案 0 :(得分:4)

这里有一个有效的例子: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 :(得分:0)

有时,浏览器设置会在新标签页或同一窗口中打开链接。

您可以检查链接对象的目标属性。

<a href="http://your_link_to_page" target="_blank" >This open in new window</a>

使用javascript在页面加载时操作锚标记并检查目标属性。如果目标值设置为_blank,则启用它们,或者您可以在用户单击链接时执行此检查。

您可以使用一种机制查找单击链接时按下的CTRL。有一些资源,如this。你可以建立一个系统。

NOte:如果您使用的是JQuery,请使用不同的类来对必须检查的链接进行分类。并在准备状态或单击链接时禁用它们。

答案 2 :(得分:0)

您无法阻止浏览器在新标签页或窗口中打开链接。可能有(不可更改的)配置设置迫使它,或考虑鼠标手势:右键点击并向下移动将在Opera中打开一个新选项卡,我想这是不可检测的。

此外,强制浏览器在新窗口(target="_blank"甚至window.open)中打开选项卡被视为不良风格。你应该让用户选择他想做的事情。如果你真的想这样做,你也可以考虑window.onunload这应该是最常用的。