如何在 javascript 中 window.location.reload() 之后修复“消息端口在收到响应之前关闭”

How to fix "The message port closed before a response was received." after window.location.reload() in javascript

提问人:nguyen xuan linh 提问时间:4/3/2019 更新时间:11/17/2023 访问量:10038

问:

自从 chrome v73.0.3683.86 以来,我遇到了 javascript 问题,每当我在 window.location.reload() 函数之后运行我的 javascript 代码时,它总是给我错误“未经检查的 runtime.lastError:消息端口在收到响应之前关闭。

我在互联网上搜索了很多主题,但其中大部分是关于 chrome 扩展的。所以我尝试在 cognito 模式下运行此代码并禁用所有扩展,但没有更改。

※由于某种原因,我需要在window.location.reload()之后运行一些东西

onClick javascript 函数,如下所示

<html>
    <head>
        <title>Hello world!</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script type="text/javascript">
            function buttonClick() {
                window.location.reload();
                document.title = "Hi there";
            }
        </script>
    </head>
    <body>
        <div>TODO write content</div>
        <button onclick="buttonClick()">Click here</button>
    </body>
</html>

javascript 谷歌浏览器

评论

1赞 Jaromanda X 4/3/2019
For some reason I need to run something after window.location.reload()- 好吧,你的整个设计是有缺陷的。重新加载页面后,之后的代码就无关紧要了
0赞 Kaiido 4/3/2019
哦,惊喜!@JaromandaX 我想和你一模一样,然后去尝试 location.reload();navigator.sendBeacon('foo') 在我的本地主机上,在我的服务器日志中,我可以清楚地看到请求正在执行。实际上甚至会起作用。location.reload(); localStorage.executesAfter="true";
0赞 Kaiido 4/3/2019
@OP,在问题中运行代码片段时,您是否看到此消息?73.0.3683.86 在 macOS 上在这里,我一无所获。
0赞 Jaromanda X 4/3/2019
@Kaiido - 是的,这有效......但这不是OP想做的,他想在卸载后更改页面的标题?
0赞 nguyen xuan linh 4/3/2019
谢谢大家,但我正在寻找有关“消息端口在收到响应之前关闭”的解释 @Jaromanda:是的,设计不好,它在 chrome 版本 73 之前运行良好,尽管:(

答:

2赞 Mai Huu 4/5/2019 #1

您可以尝试在没有任何扩展名的情况下在 chrome 上运行它吗? - 右键单击您的 Chrome 快捷方式 - 选择属性。 - 添加到目标字段的末尾 --disable-extensions --disable-plugins

它如下所示:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" /high-dpi-support=1 /force-device-scale-factor=1 --disable-extensions --disable-plugins
  • 单击“确定”
  • 启动 Chrome。
2赞 nguyen xuan linh 4/5/2019 #2

谢谢大家,我发现了问题所在,这是因为扩展尝试通过运行“chrome.runtime.sendMessage”将消息发送到它的后台 .js 因此,当我运行windown.location.onload()函数时,它会关闭消息端口并抛出错误消息!

问题是无法在我的办公室计算机上禁用扩展:))

0赞 Jack Brown 11/4/2022 #3

停用您在 Chrome 浏览器上安装的所有扩展程序。这对我有用,我看到很多人都说它有效。

希望这也对你有用。

如果无法禁用扩展程序,则可以在控制台中隐藏错误消息。 转到控制台并取消选中过滤器后面的“自定义级别”下的“错误”。请参阅屏幕截图。

enter image description here

评论

0赞 user3481644 3/19/2023
嗯,禁用所有扩展 - 并失去所需的功能,这不是真正的解决方案,特别是如果这违反了公司政策。如果可以将其限制为仅来自该扩展的消息,则关闭错误就可以了,否则,所有其他错误(包括 OP 开发人员生成的错误)都将被阻止。
0赞 ATLAS2002 11/17/2023 #4

好吧,这个有点不同,与 OP 中的问题不完全相关。但是,如果您在单击按钮时遇到问题,那么这里有一个提醒。

   <button type="button"></button>

如果您将按钮包装在表单元素中,则可能会发生这种情况。表单元素中按钮的默认行为是“submit”。因此,如果按钮未尝试提交表单数据,请将其更改为“按钮”。