【问题标题】:Closing another tab/window关闭另一个选项卡/窗口
【发布时间】:2019-08-16 11:18:55
【问题描述】:

我有 3 个 html 页面。第 1 页链接到第 2 页,第 2 页链接到第 3 页(为简单起见)。

我希望第 2 页中的链接打开第 3 页并关闭第 1 页(标签 1)。

据我了解,您无法使用 Javascript 关闭尚未使用 Javascript 打开的页面,这就是我卡住的地方。

我尝试了在网上找到的各种代码,但看起来越来越有可能这是不可能的。有没有其他方法可以专注于已经打开的标签,或者人们可能会觉得对我有用的任何东西可以尝试?

第 1 页是主网页,但在单击第 2 页中的链接后,我真的希望能够重新关注第 1 页 - 传递数据....我知道这与我上面所说的相矛盾,但我是只是尝试使用这 3 个页面通过 window.close() 等来测试一些东西......

【问题讨论】:

    标签: javascript html firefox browser tabs


    【解决方案1】:

    是的,这是不可能的,如果网页可以随机关闭其他页面,那就太糟糕了。 如果它只是为了你自己而不是想为他人发布,那么制作一个浏览器扩展来做到这一点可能是一个不错的选择。

    【讨论】:

      【解决方案2】:

      正如您所说,无法关闭未使用 window.open 打开的选项卡。也许您可以显示某种消息或叠加层来建议用户移动标签

      假设您的所有标签都在同一个域中,您可以尝试使用共享网络工作者 MDN - SharedWorker 来检测哪些页面当前处于活动状态/

      注意:跨浏览器支持对于共享网络工作者来说不是很好。

      【讨论】:

        【解决方案3】:

        假设你的第一页是 first.html :

        <!DOCTYPE html>
        <html>
        
        <head>
            <title>
                First Page
            </title>
        </head>
        
        <body>
            <button onclick="openWin()">Open Second Page</button>
            <div>
                This is first page
            </div>
            <script>
                var myWindow;
        
                function openWin() {
                    myWindow = window.open("second.html");
                }
            </script>
        
        </body>
        
        </html>
        

        现在你的第二页是 second.html :

        <!DOCTYPE html>
        <html>
        
        <head>
            <title>
                Second Page
            </title>
        </head>
        
        <body>
        
            <button onclick="openWin()">Open Third Page & Close First Page</button>
            <div>
                This is second page
            </div>
            <script>
                var myWindow;
        
                function openWin() {
                    myWindow = window.open("third.html");
                    window.opener.close()
                }
            </script>
        </body>
        
        </html>
        

        最后你的第三页可能看起来像third.html:

        <!DOCTYPE html>
        <html>
        <head>
            <title>Third page</title>
        </head>
        
        <body>
            This is third page
        </body>
        
        </html>
        

        应该可以。试试这个。

        【讨论】:

        • 这不会关闭第 1 页吗?!
        • 为什么不呢?您必须打开第一页。然后点击“打开第二页”将打开第二页。然后您可以单击“打开第三页并关闭第一页”,这样它就可以工作了。请注意,您的第二页无法独立打开。它必须通过从第一页单击按钮打开。否则这是行不通的。
        • 但是第一页不是用javascript打开的,因此不能用javascript关闭。还是我错过了什么?
        • 您不需要使用 javascript 打开首页。您可以独立打开它。只需确保您已通过单击按钮从第一页打开第二页。然后单击第二页上的按钮将关闭第一页并打开第三页。查看此 gif 以获取许可。 imgur.com/a/H3H8XUg
        • 是的,它在 chrome 中有效,但在 Firefox 中无效。不过感谢您的想法。
        【解决方案4】:

        写在MDN page for Window.close()(强调他们的)上

        只能在使用Window.open() 方法的脚本打开的窗口上调用此方法。如果窗口不是由脚本打开的,控制台会出现类似这样的错误:Scripts may not close windows that were not opened by script.

        所以如果你的第1页不是用JavaScript打开的,那么无论如何用JS都没有办法关闭它。我不知道有什么办法可以规避这一点。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多