我希望在Chrome浏览器中以新的进程/上下文打开新窗口(我不确定是否可以使用window.open函数,但是以下示例可以实现)。如果是一个普通窗口,您可以通过以下示例检查弹出窗口拦截程序是否已启用。
ar newWin = window.open(url);
if(!newWin || newWin.closed || typeof newWin.closed=='undefined')
{
//POPUP BLOCKED
}
但我想在没有使用window.open的情况下以新进程打开新窗口,如下所示
var prod = document.getElementById("myElement");
var aTag = document.createElement('a');
aTag.setAttribute('href',"http://cnn.com");
//THIS TWO LINES do the job
aTag.setAttribute('rel',"noreferrer");
aTag.setAttribute('target',"_blank");
prod.appendChild(aTag);
aTag.click();
prod.removeChild(aTag);
使用此参考链接:http://news.softpedia.com/news/Force-Google-Chrome-to-Open-Links-in-New-Processes-128962.shtml
如需在新上下文中打开新标签页,请使用以下内容:
aTag.setAttribute('rel',"noreferrer");
aTag.setAttribute('target',"_blank");
虽然这样做可以起作用,但有时候新窗口/标签会被弹出拦截器(blocker)屏蔽,我只想知道这一点并在内部通知用户新窗口已被阻止,请启用它...我有哪些选项?
我的要求是:
- 在新的进程/上下文中打开窗口
- 如果弹出拦截器被阻止则通知用户
如何实现?
更新
我需要这样做,因为当您从现有窗口单击打开新窗口时,第二个窗口被打开,您返回到第一个/源窗口并且想要做某些事情时,它会被阻止!
为了模拟这个问题,您可以创建这个简单的文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>BlockTAB</title>
</head>
<br/>
<br/>
<button onclick="windowOpen('http://cnn.com')">window open native</button>
<br/>
<br/>
<button onclick="windowOpen('http://google.com')">sample</button>
<script>
function windowOpen(url){
window.open(url);
}
</script>
</html>
现在请按以下步骤操作:
- 运行程序(即html文件),这将打开CNN选项卡
- 检查CNN选项卡并在其上设置断点(在源选项卡中,您可以找到Javascript,请将其放在任何您选择的位置),直到它停止
- 现在返回到第一个选项卡,您会发现两个按钮被阻止,您无法进行任何操作,如单击等...
如何在不阻止第一/源选项卡的情况下处理打开新选项卡?
更新2
如果代码未触发弹出拦截器,则有一种方法可以模拟它:
aTag.setAttribute('rel',"noreferrer"); aTag.setAttribute('target',"_blank");
将此代码添加到先前示例中
<script src="https://cdn.jsdelivr.net/bluebird/3.4.5/bluebird.js"></script>
<br/>
<br/>
<button onclick="EnabledPPB('http://cnn.com')">Blocker</button>
function delayFN(url) {
Promise.delay(500)
.then(function() {
var newWin = window.open(url);
})
}
function EnabledPPB(url) {
Promise.delay(100)
.then(function() {
delayFN(url);
})
}