区分在当前标签中打开的链接与新标签

问题描述:

我想要做的例子:在Facebook上,单击在当前标签中打开链接的链接将触发一些Javascript而不是打开链接。但是,在新选项卡中打开它(通过右键单击或按住Ctrl/Cmd)将打开链接而不调用任何Javascript。区分在当前标签中打开的链接与新标签

我想对我的链接做同样的操作(链接行为取决于目标)。我有onclick事件处理程序return false;以避免打开链接;但是这会导致Ctrl +单击无法打开链接。我如何实现这一目标?

编辑:我不想链接强制在新窗口打开。 如果链接在新窗口中打开,我希望它像往常一样跟随href。但是,IF链接在当前窗口中打开,而不是在当前窗口中的链接,我想要一些Javascript运行。

如果您在当前窗口中打开它,并在整个页面中打开它,如果您在新窗口中打开它,Facebook会打开弹出式“影院”中的图像。

请注意,捕获链接上的click事件并使用preventDefault()return false会导致Cmd + Click(在新选项卡中打开)失败。在任何情况下,本应不论如何链接打开工作 - 点击,回车键等

编辑2:看来hashchange/HTML5 pushState的是去了解这个

+0

你想在新窗口中的链接总是打开? – ShankarSangoli 2012-02-13 01:23:29

+0

你不能只将目标更改为所有锚上的'_blank'? – ZeroDivide 2012-02-13 01:27:17

你可以正确的方法设置锚点的href指向正确的网址。这种方式右键单击并打开一个新的选项卡或窗口将工作正常。

使用jQuery将click事件处理程序绑定到锚点,如下所示。

$('a').click(function(e){ 
    //Do whatever javascript operation you want. 
    if(!e.ctrlKey){ 
     e.preventDefault();//Stop the page to navigate to the url set in href 
    } 
}); 

Demo

+0

请不要混淆作为导航源的* links *(它是'A'元素和'href'属性),而* anchors *(它们是具有'name'属性的'A'元素),它们是目的地。 'A'元素可以同时是*链接*和*锚*,但并不常见。 – RobG 2012-02-13 03:18:08

+0

这取决于要求,但是我们应该让链接表现为链接。 – ShankarSangoli 2012-02-13 03:52:13

+0

Cmd +点击无法打开链接当我这样做 – 2012-02-13 07:28:52