搜尋

首頁  >  問答  >  主體

javascript - 关于打开新窗口,浏览器拦截的问题

项目中有一个需求,要打开新窗口预览,我用了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上,就会被拦截。哪位高人能指点一下小菜我。谢谢了。真心的。

PHP中文网PHP中文网2817 天前349

全部回覆(1)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-10 17:39:00

    楼主的文章看的不是很清晰。
    按经验来说,在异步进程中不能打开新窗口,这个避免不了的。属于浏览器的安全策略。
    因为新开窗口必须是用户行为触发才行,在异步的进程中认为不是用户行为。

    补充:(忘了写解决方法了)
    在用户点击的时候新开一个窗口,并拿到引用iframe,异步请求后得到一个url,设置 iframe.src=url。试试看?

    回覆
    0
  • 取消回覆