2012-07-06 103 views
0

我正在做一个builder.addons.mozilla插件,我已经发布了下面的main.js代码。这个想法是,当我点击插件的小部件时,它通过将disableWebIQ变量设置为true来禁用在panelist-webiq-cdn.appspot.com/warptest上运行的脚本。设置变量可以工作,但每当安装插件时,页面脚本中的setTimeout调用都不起作用。向页面添加PageMod是否禁用setTimeout?setTimeout不能与插件一起工作

按钮脚本和myScript.js的代码没有太多的功能,而且当你单击widget时myScript.js不会运行,所以我怀疑这是什么在页面中禁用了setTimeout。

var ss = require("simple-storage"); 
ss.storage.enabled = true; 
ss.storage.panelIdList = []; 
const widgets = require("widget"); 
const data = require("self").data; 

var player = widgets.Widget({ 
    id: "player", 
    width: 16, 
    label: "PanelistWebIQ", 
    contentURL: data.url("buttons.html"), 
    contentScriptFile: data.url("buttonScript.js"), 
    onClick: function(){ 
     if(ss.storage.enabled){ 
      ss.storage.enabled = false; 
      pageMod.destroy(); 
     } 
     else{ 
      ss.storage.enabled = true; 
      pageMod = pageModModule.PageMod({ 
       include: "*", 
       contentScriptWhen: 'start', 
       contentScriptFile: data.url('myScript.js') 
      }); 
     } 
    } 
}); 

var pageModModule = require("page-mod"); 
var pageMod = pageModModule.PageMod({ 
    include: "*", 
    contentScriptWhen: 'start', 
    contentScriptFile: data.url('myScript.js'), 
    onAttach: function(worker){ 
     var url = worker.url; 
     var newPanelId = ''; 

     if(url.match(/^https?:\/\/panelist-webiq-cdn.appspot.com.*panelId=.*$/)){ 
      var pattern = 'panelId='; 
      var index = url.indexOf(pattern); 
      var sub = url.substring(index + pattern.length); 
      index = sub.indexOf('&'); 
      if(index==-1){ 
       newPanelId = sub; 
      } 
      else{ 
       newPanelId = sub.substring(0, index); 
      } 
     } 

     var list = ss.storage.panelIdList; 
     if(newPanelId){ 
      var matchFound = false; 
      for(var ctr=0; ctr<list.length; ctr++){ 
       var panelId = list[ctr]; 
       if(panelId==newPanelId){ 
        matchFound = true; 
        break; 
       } 
      } 
      if(!matchFound){ 
       list.push(newPanelId); 
      } 
     } 
     worker.postMessage(list + ''); 
    } 
}); 
+1

不,内容脚本通常不会禁用超时。但是应该很容易测试'myScript.js'是否相关 - 将其替换为空文件并再次测试。 – 2012-07-06 18:24:59

回答

0

显然,如果您的脚本中有警报,该警报可以禁止将来调用setTimeout。我删除了我的插件中的所有警报,并且它工作正常。