【问题标题】:Firefox addon bar close eventFirefox 插件栏关闭事件
【发布时间】:2014-04-04 12:46:01
【问题描述】:

firefox插件中是否有一些东西可以通过它注册一个回调,当通过单击左侧的x按钮关闭插件时调用该回调?

我需要的是,当用户使用 x 按钮关闭插件栏时,应该通知我在该栏上加载的扩展。现在发生的情况是,即使用户关闭了插件栏,它也没有关闭;相反,它只是隐藏起来。

如果我们可以通过回调通知我们用户点击了 x 按钮,那么我可以在扩展程序中收听。

【问题讨论】:

    标签: firefox firefox-addon


    【解决方案1】:

    是的,先生,绝对有:MutationObserver。

    将其复制粘贴到浏览器环境中的暂存器文件中,然后在插件栏关闭和打开时,您将看到一条消息。

    // select the target node
    var win = Services.wm.getMostRecentWindow('navigator:browser');
    var target = win.document.querySelector('#addon-bar');
    
    // create an observer instance
    var observer = new win.MutationObserver(function(mutations) {
      mutations.forEach(function(mutation) {
          if (mutation.attributeName == 'collapsed') {
              Services.prompt.alert(null,'title','addon bar toggled it WAS = ' + mutation.oldValue);
          }
      });    
    });
    
    // configuration of the observer:
    var config = { attributes:true, attributeOldValue:true };
    
    // pass in the target node, as well as the observer options
    observer.observe(target, config);
    
    // later, you can stop observing
    //observer.disconnect();
    

    【讨论】:

    • 这有点矫枉过正。此外,突变事件的代价非常高——如果它们被用于文档中的某个位置,那么该文档中所有更改的性能都会显着下降。
    • MutationEvents 已被弃用 - MDN: MutationEvents MutationObserver 被用来替换它,因此它没有性能问题。 MDN: MutationObserver Woo 学生成为老师的老师,一个回复可能不会再得到你了哈哈:P
    • 啊,我不知何故忽略了您建议突变观察者而不是突变事件。是的,性能方面的考虑不会发挥作用。尽管如此,还是有点矫枉过正......
    【解决方案2】:

    执行此操作的最简单方法是将command 处理程序附加到相关按钮。如果您的代码在浏览器窗口内运行,则可以这样做:

     var closeButton = document.getElementById("addonbar-closebutton");
     closeButton.addEventListener("command", function(event) {
       // Add-on bar is being closed, do something
     }, false);
    

    请注意,从 Firefox 中删除附加栏后,此代码将很快停止工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 2013-03-18
      相关资源
      最近更新 更多