0

我正在使用 builder.addons.mozilla 制作插件,我在下面发布了 main.js 代码。这个想法是,当我单击插件的小部件时,它会通过将 disableWebIQ 变量设置为 true 来禁用在 panelist-webiq-cdn.appspot.com/warptest 上运行的脚本。设置变量有效,但无论何时安装插件,页面脚本中的 setTimeout 调用都不起作用。将 PageMod 添加到页面是否会禁用 setTimeout?

按钮脚本和 myScript.js 的代码并没有做太多事情,而且当您单击小部件时 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 + '');
    }
});
4

1 回答 1

0

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

于 2012-07-26T15:07:56.417 回答