更新:
这是我的解决方案:https : //stackoverflow.com/a/64196599/6011193
更新:我向 chrome 团队报告了这个错误,请帮我投票这个问题:https : //bugs.chromium.org/p/chromium/issues/detail?id=1134899#c_ts1603534836
旧:我猜是这个 chrome 错误,所以这是我的 tmp 解决方案
简而言之,使用chrome扩展api“结束进程”当前选项卡进程然后重新加载,它是相同的手动chrome>任务管理器>结束进程然后点击重新加载
详细:
使用chrome.processes,它需要最新的chrome dev 频道(不是 chrome 稳定版)
chrome.processes.terminate
终止当前选项卡进程
chrome.tabs.onUpdated
监听“ctrl+r”重载事件,当重载“localhost”dev url时,先“结束进程”再重载
以下是我的部分解决方案代码(完整代码很长所以我省略了,但您可以参考自己编写代码)
/**
*
*/
import {CrxAsync} from "./node_modules/ro-crx/src/index.js"
class ForceReloadInLocalhost extends CrxAsync {
constructor() {
super()
chrome.processes.onExited.addListener(() => {
this.startReload()
})
}
start(tab) {
if (tab == null) {
this.getCurTab((curTab) => {
this.start(curTab)
})
} else {
this.tabId = tab.id;
var tabId = this.tabId
if (tab.url.match(/localhost/)) {
this.killProcess(tabId, (status) => {
if (status == "not_process") {
this.startReload()
}
})
} else {
this.startReload()
}
}
}
startReload() {
if (this.tabId) {
this.reload(this.tabId, {}, () => {
this.tabId = null
})
}
}
}
var forceReload = new ForceReloadInLocalhost()
chrome.commands.onCommand.addListener((cmd) => {
if (cmd == "forceReload") {
forceReload.start()
}
})
var isForceReload = true
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
if (tab.url.match(/^https?:\/\/localhost/)) {
if (changeInfo.url == undefined /* it means is reload, so url doesn't change*/ && changeInfo.status == "loading") {
if (!isForceReload) {
isForceReload = true
forceReload.start(tab);
} else {
isForceReload = false
}
}
}
})