与DOM交互的Firefox扩展

时间:2015-05-29 07:36:19

标签: javascript jquery firefox-addon firefox-addon-sdk

我正在开发一个firefox扩展,其中包含一组与de current tab DOM交互的选项。 当您选择一个选项时,当鼠标结束时以及单击一个元素时,活动选项卡的DOM中的所有元素都会高亮显示我想根据面板中选择的选项触发不同的操作。 我已经使它工作了,但是当你选择一个选项然后选择其他内容脚本时,“opt”变量具有这两个值。

main.js

panel.port.on('select', function(sel){
 attachScript(sel);
 panel.hide();
});

function attachScript(selected)
{
  var worker = tabs.activeTab.attach({
   contentScriptFile: [self.data.url("js/jquery-1.11.3.min.js"), self.data.url("js/content.js")]   
  });

  worker.port.emit('option', selected);
}

content.js

var opt = '';

self.port.on('option', function(option){
 $('body').off('click', '.activelem',controlClick);
 if (option)
 {
  $('body').on('click', '.activelem', controlClick);
  opt = option;      
  window.addEventListener('mousemove', handler);    
 }
});

我的问题:

  • 每次选中面板选项并执行attachScript功能时,脚本都会被注入,或者只是第一次注入?
  • 我是否需要设置port.once来注入脚本然后使用普通的port.on?如果是这样,我每次如何与内容脚本进行通信?
  • 每次按下ActionButton时,如何在内容脚本中删除侦听器,因此每次打开面板时都会重新开始。

1 个答案:

答案 0 :(得分:2)

  

每次选中面板选项并执行attachScript功能时,都会注入脚本

  

我是否需要设置port.once来注入脚本然后使用普通的port.on?如果是这样,我每次如何与内容脚本进行通信?

您可能应该跟踪哪些标签已经附加了工作人员,weakmap适用于此目的

  

每次按下ActionButton时,如何在内容脚本中删除侦听器,因此每次打开面板时都会重新启动。

尝试destroy工作人员