gpt4 book ai didi

javascript - 在 chrome 扩展中如何触发停用事件?

转载 作者:行者123 更新时间:2023-12-03 23:51:30 26 4
gpt4 key购买 nike

我有一个 chrome 扩展,它通过内容脚本注入(inject)一些 DOM 事件监听器。我想在用户停用插件的情况下从 DOM 中删除这些事件监听器,是否有方法可以这样做?

最佳答案

这是一个有趣的问题。它与“孤立”脚本的概念有关。我在附录中详细讨论了那些 here .

问题是,一旦脚本与父扩展分离,Chrome API 就会失败。因此,检测这一点并不简单。

有很多可能的方法:

  1. 维护 open port到后台页面。如果后台页面不复存在,端口将触发 onDisconnected 事件。

    这是一种基于事件的方法 - 您将能够立即使用react。

    但这有一个重要的缺点:保持开放端口将防止 Event page从卸载。因此,如果您使用非持久性后台页面,这不是最佳选择。

  2. 定期或更好 - 在您的处理程序开始时,尝试使用 Chrome API 做一些事情。 这将失败,并且您可以捕获异常并假设该扩展是孤立的。

    请注意,这几乎是未定义的行为。 Chrome API 的 react 方式会随着时间而改变。

    function heartbeat(success, failure) {
    try {
    if(chrome.runtime.getManifest()) {
    success();
    } else { // will return undefined in an orphaned script
    failure();
    }
    } catch(e) { // currently doesn't happen, but may happen
    failure();
    }
    }

    function handler() {
    heartbeat(
    function(){ // hearbeat success
    /* Do stuff */
    },
    function(){ // hearbeat failure
    someEvent.removeListener(handler);
    console.log("Goodbye, cruel world!");
    }
    );
    }
    someEvent.addListener(handler);
  3. 最后,有 a proposal to make a special event for this situation ,但尚未实现。

  4. 专用于 updates when the extension is reloaded ,您可以让它将脚本注入(inject)现有页面并让旧脚本知道它们应该停用;但是,由于您的问题是有关扩展被删除的问题,因此没有帮助。

困难的部分完成后,事件监听器的实际删除取决于您添加它们的方式,但应该很简单。

关于javascript - 在 chrome 扩展中如何触发停用事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35123117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com