如何在接收消息时重新加载contentScript(page-mod)?

时间:2014-05-08 15:12:58

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

我做了一个插件,创建了一个togglebutton和一个附加到它的面板,面板有一个启用/禁用按钮,单击该按钮将发出一个"激活/停用"发送给main.js的消息。

当main.js收到"停用"消息它调用page-mod上的destroy方法,并禁用contentScript,并恢复对原始文档所做的所有更改。

然而,当main.js收到激活消息时没有任何反应,它会创建page-mod但它不会将它注入目标文档,除非我重新加载页面

如何在不重新加载页面的情况下激活和注入page-mod contentScript?

Main.js:

var { ToggleButton } = require('sdk/ui/button/toggle');
var panels = require("sdk/panel");
var self = require("sdk/self");
var tabs = require('sdk/tabs');
const { PageMod } = require("sdk/page-mod");

var button = ToggleButton({
    id: "my-button",
    label: "my button",
    icon: "./icon-16.png",
    onChange: function(state) {
        if (state.checked) panel.show({ position: {top: 10, right: 45} });
    }
});

var options = {
        include: "https://www.example.com/*",
        contentScriptWhen: "end",
        contentStyleFile: self.data.url("style.css"),
        contentStyle: ["rule1", "rule2", ...],
        attachTo : ["top"]
};

var mod = PageMod(options);

var panel = panels.Panel({
    contentURL: self.data.url("popup.html"),
    contentScriptFile: self.data.url("popup.js"),
    contentScriptWhen: "ready",
    onHide: function(){button.state('window', {checked: false});},
    onAttach: function() {
        panel.port.on('setStatus', function(status) {                   
            if (status && !mod) mod = PageMod(options);
            else {
                if (mod) mod.destroy();
                mod = null;
            }
        });
    }
});

1 个答案:

答案 0 :(得分:1)

options.attachTo = ["existing", "top"]