Firefox WebExtension 弹出窗口 - 'click' 事件功能正常,但 'unload' 不工作(相反,'blur' 工作正常)
Firefox WebExtension popup - 'click' event functional, but 'unload' is not working (instead, 'blur' works fine)
当我将 "unload" 更改为 "blur" 时它起作用了(不幸的是 - 即使我只从调用 "scroll" 函数的按钮上移开了焦点)。我希望 "stopScrolling" 在用户关闭(在外部单击)弹出窗口 window 后执行。我也试过 "beforeunload" 事件,它也不起作用。下面是代码的残缺版本:
function scroll(tabs) {
browser.tabs.sendMessage(tabs[0].id, {
command: "scroll",
})
}
function stopScrolling(tabs) {
browser.tabs.sendMessage(tabs[0].id, {
command: "stop",
})
}
function reportError(error) {
console.error(`Could not execute: ${error}`)
}
function init() {
window.addEventListener("unload", () => {
browser.tabs.query({ active: true, currentWindow: true })
.then(stopScrolling)
.catch(reportError)
})
window.addEventListener("click", (e) => {
browser.tabs.query({ active: true, currentWindow: true })
.then(scroll)
.catch(reportError)
})
}
function reportExecuteScriptError(error) {
document.querySelector("#popup-content").classList.add("hidden")
document.querySelector("#not-received-msg").classList.remove("hidden")
document.querySelector("#not-received-msg").textContent = "Script error!"
console.error(`Failed to execute content script: ${error.message}`)
}
browser.tabs.executeScript({ file: "bcgscript.js" })
.then(init)
.catch(reportExecuteScriptError)
我想出了一个替代解决方案,这不是我想要的(如果有的话):
window.addEventListener("blur", (e) => {
if(e.target == window)
browser.tabs.query({ active: true, currentWindow: true })
.then(stopScrolling)
.catch(reportError)
})
我看到了 https://whosebug.com/users/8665598/alex-goico applied "unload" event here Firefox Extension - onPopupClose event? 并且说它有效。
当我将 "unload" 更改为 "blur" 时它起作用了(不幸的是 - 即使我只从调用 "scroll" 函数的按钮上移开了焦点)。我希望 "stopScrolling" 在用户关闭(在外部单击)弹出窗口 window 后执行。我也试过 "beforeunload" 事件,它也不起作用。下面是代码的残缺版本:
function scroll(tabs) {
browser.tabs.sendMessage(tabs[0].id, {
command: "scroll",
})
}
function stopScrolling(tabs) {
browser.tabs.sendMessage(tabs[0].id, {
command: "stop",
})
}
function reportError(error) {
console.error(`Could not execute: ${error}`)
}
function init() {
window.addEventListener("unload", () => {
browser.tabs.query({ active: true, currentWindow: true })
.then(stopScrolling)
.catch(reportError)
})
window.addEventListener("click", (e) => {
browser.tabs.query({ active: true, currentWindow: true })
.then(scroll)
.catch(reportError)
})
}
function reportExecuteScriptError(error) {
document.querySelector("#popup-content").classList.add("hidden")
document.querySelector("#not-received-msg").classList.remove("hidden")
document.querySelector("#not-received-msg").textContent = "Script error!"
console.error(`Failed to execute content script: ${error.message}`)
}
browser.tabs.executeScript({ file: "bcgscript.js" })
.then(init)
.catch(reportExecuteScriptError)
我想出了一个替代解决方案,这不是我想要的(如果有的话):
window.addEventListener("blur", (e) => {
if(e.target == window)
browser.tabs.query({ active: true, currentWindow: true })
.then(stopScrolling)
.catch(reportError)
})
我看到了 https://whosebug.com/users/8665598/alex-goico applied "unload" event here Firefox Extension - onPopupClose event? 并且说它有效。