JavaScript - 在新标签页打开链接(在相同窗口中)

8

我知道已经有几个关于这个主题的问题在SO上了,但它们似乎都很陈旧....只是想获得一个最新的答案:

在同一浏览器窗口中打开一个新选项卡的标准方式是否仍然是:

window.open('url', '_blank');
window.focus();

同时,我已经阅读过相关内容,发现这取决于用户浏览器的配置(新页面是在新标签页还是新窗口打开,以及新标签页/窗口是否获得焦点)......我希望焦点保留在原始标签页上,但更关心的是在同一浏览器窗口中打开一个新标签页(保持焦点只是额外的奖励)。

那么,在新版浏览器中有没有一种方法可以读取/获取此设置?(chrome、ff、ie)并可能提示用户更改其设置,如果他们将其设置为在新窗口中打开?

2个回答

12

我在这方面取得了巨大的成功

<a target='_blank' > 

9

使用 target="_blank" 更为可取。

例如,在 Chrome 中,带有 target="_blank" 属性的锚点会打开新标签页,然而,window.open 则会打开全新窗口。

我尝试了几个实验,将 window.open 替换为 target="_blank"

被弹出拦截器拦截

// create an anchor, add to body, trigger click
var a = document.createElement('a');
a.setAttribute('href', 'http://google.com');
a.setAttribute('target', '_blank');
document.body.appendChild(a);
a.click();

// hijack first anchor, change href, trigger click
var a = document.getElementsByTagName('a')[0];
a.setAttribute('href', 'http://google.com');
a.setAttribute('target', '_blank');
a.click();

// hijack first anchor that has target=_blank, change href, trigger click
var a = $('a[target="_blank"]')[0];
a.setAttribute('href', 'http://google.com');
a.click();

允许弹出窗口拦截器

// hijack first anchor that has target=_blank, change href, next document click triggers it
var a = $('a[target="_blank"]')[0];
a.setAttribute('href', 'http://google.com');
$(document).click(function(){
    $('a[target="_blank"]')[0].click();
});

// create an anchor, add to body, next document click triggers it
var a = document.createElement('a');
a.setAttribute('href', 'http://google.com');
a.setAttribute('target', '_blank');
document.body.appendChild(a);
$(document).click(function(){
    a.click();
});

只要弹出窗口是由用户交互触发的,弹出窗口拦截器就会允许它。Mozilla关于window.open的文档:https://developer.mozilla.org/en-US/docs/Web/API/window.open

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