项目中有一个需求,要打开新窗口预览,我用了window.open
方法,被浏览器拦截,
同事在网上找到了一个
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<button id="test">Open Google</button>
<script type="text/javascript">
document.getElementById("test").addEventListener("click", openNewBackgroundTab, false);
function openNewBackgroundTab(){
var a = document.createElement("a");
a.href = "http://www.baidu.com/";
a.target = '_blank';
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
a.dispatchEvent(evt);
}
</script>
</body>
</html>
可是只有chrome可以,其它的还不兼容,
然后又想到说在页面中加了一个a标签,然后需要开新窗口时,用jquery选择到,触发点击事件,新窗口还是被拦截了。
最后我想到博客了,看了一下新浪的,代码解压后大概如下;
$E("articlePreviewBtn").onclick = articlePreviewHandler;
function articlePreviewHandler(e) {
v7sendLog("16_01_26");
if ($E("article_tag_input").value == _CFG.dftTagValue)
$E("article_tag_input").value = "";
var html = setSourceValue();
var isEmpty = _EditorCase.isEmptyContent();
if (isEmpty) {
winDialog.alert("博文内容不能为空", {
icon: "01"
});
return
}
if (window.articleAssociate) {
window.articleAssociate.saveSeleteData()
}
$E("editorForm").target = "_blank";
$E("editorForm").action = _CFG.articlePreviewURL;
$E("editorForm").submit();
return false
}
看是做了个表单提交,然后我写仿着写了一个,用jquery取到form,给action和target,还是被拦截了。
现在好头疼,像之前的a标签,本地是ok的,我们放到测试环境beta上,就会被拦截。哪位高人能指点一下小菜我。谢谢了。真心的。
伊谢尔伦2017-04-10 17:39:00
楼主的文章看的不是很清晰。
按经验来说,在异步进程中不能打开新窗口,这个避免不了的。属于浏览器的安全策略。
因为新开窗口必须是用户行为触发才行,在异步的进程中认为不是用户行为。
补充:(忘了写解决方法了)
在用户点击的时候新开一个窗口,并拿到引用iframe,异步请求后得到一个url,设置 iframe.src=url。试试看?