如何修复“收到响应前消息端口已关闭”。在 javascript 中的 window.location.reload() 之后
Posted
技术标签:
【中文标题】如何修复“收到响应前消息端口已关闭”。在 javascript 中的 window.location.reload() 之后【英文标题】:How to fix "The message port closed before a response was received." after window.location.reload() in javascript 【发布时间】:2019-08-24 11:10:27 【问题描述】:我遇到了 javascript 问题,因为 chrome v73.0.3683.86,每当我在 window.location.reload() 函数之后运行我的 javascript 代码时,它总是给我错误“Unchecked runtime.lastError: The message port在收到回复之前关闭。”
我在互联网上搜索了很多主题,但大部分都是关于 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>
【问题讨论】:
For some reason I need to run something after window.location.reload()
- 好吧,你的整个设计有缺陷。重新加载页面后,之后的代码就无关紧要了
哦,惊喜! @JaromandaX 我和你的想法完全一样,然后在我的本地主机上尝试 location.reload();navigator.sendBeacon('foo') ,在我的服务器日志上我可以清楚地看到请求已执行。实际上,即使location.reload(); localStorage.executesAfter="true";
也可以。
@OP,您在运行问题中的代码 sn-p 时是否看到此消息? macOS 上的 73.0.3683.86 在这里,我什么都没有。
@Kaiido - 是的,这行得通......但这不是OP想要做的,他想在卸载页面后更改页面标题?
谢谢大家,但我正在寻找关于“在收到响应之前关闭消息端口”的解释@Jaromanda:是的,设计不好,虽然在 chrome 版本 73 之前它运行良好:(
【参考方案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。
【讨论】:
Anh hữu nói tiếng người điiiiii :v【参考方案2】:谢谢大家,我发现了问题,这是因为一个扩展尝试通过运行“chrome.runtime.sendMessage”向它的 background.js 发送消息 因此,当我运行 windown.location.onload() 函数时,它会关闭消息端口并抛出错误消息!
问题是无法在我的办公室计算机上禁用扩展程序:))
【讨论】:
以上是关于如何修复“收到响应前消息端口已关闭”。在 javascript 中的 window.location.reload() 之后的主要内容,如果未能解决你的问题,请参考以下文章
如何在android java中修复sqliteException
如何修复在 Hive 下运行的 geoip2 java 的“java.lang.NoSuchMethodError”