阻止Firefox打开阻止的弹出窗口

时间:2019-03-26 14:08:04

标签: javascript firefox popup

对于Web应用程序,我可以选择打开一个弹出窗口(w = window.open),以为最终用户启用多屏显示。

当js在没有用户输入的情况下打开弹出窗口时(加载先前的用户配置),Firefox会按预期将其阻止。

我可以使用w == null进行检测,并且如果用户不希望使用弹出窗口,则可以处理该应用程序而没有弹出窗口。

但是,如果用户单击“允许该站点打开弹出窗口”,则Firefox将打开一个包含当前页面的弹出窗口。

是否可以阻止Firefox打开阻止的弹出窗口?

编辑:MWE

<html>
<body> 
<script type="text/javascript">
    function bug () {
        let w = window.open('', '', 'width=800, height=600');
        if (w == null) {
            console.log("blocked");
            return;
        }
        let p = w.document.createElement('div');
        p.className += "layout";
        let c = w.document.createElement('div');
        c.className += "content";
        c.style.height = '100%';
        c.innerHTML = "Hello world !";
        w.document.body.appendChild(p);
        p.appendChild(c);
    }

    document.body.innerHTML = "Hello fellow human beings";
    bug();
</script>
</body>
</html>

Edit2:当前页面和弹出窗口的混合在我这一边,主要问题仍然存在。

谢谢

1 个答案:

答案 0 :(得分:1)

如果用户在阻止弹出窗口后选择从弹出窗口工具栏中打开该弹出窗口,它将加载您提供给window.open的URL。您尚未给出一个,因此它将默认设置为同一页面。

首先,通常的解决方案是,让弹出窗口加载其他页面,而不是让其加载同一页面,然后尝试修改其DOM。在事实结束后再打开阻止的弹出窗口,仍会加载包含不同内容的正确页面。

第二种解决方案可以更紧密地执行您所要求的操作,即将弹出式URL设置为将立即关闭自身的页面。在不被阻止的情况下,您可以在加载该页面之前自行停止加载该页面。