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

Prevent blocked popup to be opened by Firefox

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

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

我可以用 w == null 检测到它,如果用户不想要它们,我可以处理这个问题以拥有一个没有弹出窗口的功能性应用程序。

但是,如果用户单击 "Allow this site to open popups",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 : 当前页面和弹出窗口的混合在我这边,主要问题仍然存在。

谢谢

如果用户在弹出窗口被阻止后选择从弹出窗口阻止的工具栏中打开弹出窗口,它将加载您给window.open的URL。你还没有给一个,所以它会默认到同一页。

首先,也是通常的解决方案是让弹出窗口加载不同的页面,而不是让它加载同一页面然后尝试修改它 DOM。然后在事后打开被阻止的弹出窗口仍然会加载具有不同内容的正确页面。

第二种更接近您要求的解决方案是将弹出窗口 URL 设置为一个将立即自行关闭的页面。在不被阻止的情况下,您可以在该页面加载以自行关闭之前停止加载该页面。