Firefox WebExtension弹出窗口-“单击”事件功能正常,但“卸载”不起作用(相反,“模糊”工作正常)

时间:2019-03-10 11:57:10

标签: popupwindow firefox-webextensions dom-events

当我将“卸载”更改为“模糊”时,它的工作方式(不幸的是-即使我仅从调用“滚动”功能的按钮上移开焦点)。我希望在用户关闭(在外部单击)弹出窗口后执行“ stopScrolling”。我也尝试过“ 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)

1 个答案:

答案 0 :(得分:1)

我想出了不是我想要的替代解决方案(如果有其他解决方案):

window.addEventListener("blur", (e) => {
    if(e.target == window)
        browser.tabs.query({ active: true, currentWindow: true })
            .then(stopScrolling)
            .catch(reportError)
})

我看到https://stackoverflow.com/users/8665598/alex-goicoFirefox Extension - onPopupClose event?处应用了“卸载”事件,并说它有效。