【问题标题】:Clean up DOM after a Firefox add-on SDK extension Disable/Remove action is fired在触发 Firefox 附加 SDK 扩展禁用/删除操作后清理 DOM
【发布时间】:2014-05-10 13:56:34
【问题描述】:

我正在开发一个附加 SDK 扩展,它使用带有内容脚本的 pageMod 对象,当单击操作按钮时,该内容脚本将 DIV 标记添加到 DOM(此标记的行为类似于按钮)。

我正在尝试找到一个解决方案,当扩展程序被禁用或删除时,我可以删除新添加的 DOM 元素,但到目前为止我还没有运气。

我尝试的第一件事是使用AddonManager.addAddonListener(listener) 方法,我会侦听onUninstallingonDisabling 事件,然后与内容脚本进行通信,但我无处可去。

接下来我尝试使用exports.onUnload 解决方案,我尝试将消息从pageMod 的工作人员发送到内容脚本并处理从那里删除DIV但似乎在触发 onUnload 函数时内容脚本不再响应。

当扩展被禁用/删除时,真的没有办法清理修改后的DOM吗?

【问题讨论】:

    标签: firefox dom firefox-addon firefox-addon-sdk


    【解决方案1】:

    在您的内容脚本中监听detach 事件。

    self.on("detach", function(reason){
      //remove that div
    });
    

    【讨论】:

    • 它大部分时间都可以工作,所以谢谢你,但有时它似乎没有触发,因为 div 没有从任何页面中删除。我对这种行为感到目瞪口呆。
    • 另外,是我自己还是 FF Add-on SDK 文档真的很扭曲?我之前曾在一个单独的场合访问过这个页面developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/… - 这会给我解决方案 - 但我根本没想到分离事件将适用于通过 pageMod 工作程序附加的内容脚本。跨度>
    【解决方案2】:

    @paa 的回答中缺少“端口”部分:

    例如,来自the docs

    var oldInnerHTML = window.document.body.innerHTML;
    
    window.document.body.innerHTML = "eaten!";
    
    self.port.on("detach", function() {
      window.document.body.innerHTML = oldInnerHTML;
    });
    

    我没有使用 PageMod,这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多