区分在当前标签页打开链接和新标签页打开链接

6
我想做的事情是:在Facebook上,点击链接以在当前选项卡中打开它会触发一些JavaScript,而不是打开链接。 但是,在新标签页中打开它(通过右键单击或按住Ctrl/Cmd)将打开链接而不调用任何JavaScript。
我想对我的链接执行相同的操作(使链接行为取决于目标)。 我有onclick事件处理程序return false;以避免打开链接; 但这会导致Ctrl+单击无法打开链接。 我该如何实现这一点?
编辑:我不想强制链接在新窗口中打开。 如果链接在新窗口中打开,则希望它像往常一样遵循href。 但是,如果链接在当前窗口中打开,而不是在当前窗口中打开链接,我想运行一些JavaScript。
Facebook在这样做以在弹出式“剧院”中打开图像,如果您在当前窗口中打开它,并在新窗口中打开它以全屏显示。
请注意,捕获链接上的click事件并使用preventDefault()return false会导致Cmd+单击(在新选项卡中打开)失败。 无论如何,这应该适用于链接的打开方式 - 单击、Enter键等。
编辑2:似乎使用hashchange / HTML5 pushState是正确的方法

您想让链接始终在新窗口中打开吗? - ShankarSangoli
你能不能把所有锚点的目标都改成"_blank"呢? - Stephen__T
1个回答

3

您可以设置锚点的href属性指向正确的URL。这样右键点击并在新标签页或窗口中打开就能正常工作。

使用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


请不要混淆href属性的A元素作为导航来源的链接,与name属性的A元素作为目标位置的锚点A元素可以同时作为链接锚点,但这种情况并不常见。 - RobG
这取决于具体需求,但是是的,我们应该让链接表现为一个链接。 - ShankarSangoli
当我这样做时,Cmd+Click无法打开链接。 - Yuri Sulyma

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