使用addon sdk检查小部件是否存在?

时间:2013-12-09 01:29:45

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

目标是检查小部件,如果它不存在,则创建一个小部件,如果它存在,则不执行任何操作。

main.sj设置了一个小部件 向内容脚本发送消息 内容脚本检查id addon-widget的元素但输出null,为什么?

var widgetObj = widget.Widget({
    id: "addon-widget",
    label: 'Hi',
    contentURL: Data.get("images/ico.png"),
    contentScriptFile: require("sdk/self").data.url("js/checkWidgetExistence.js")
}); 

widgetObj.port.emit("check", '');

js/checkWidgetExistence.js包含:

self.port.on("check", function () {

    console.log(document.getElementById("addon-widget"));
});

为什么在控制台上输出null?:

console.log: addon: null

1 个答案:

答案 0 :(得分:0)

您应该检查主脚本中是否存在窗口小部件,而不是内容脚本。内容脚本仅用于与网页交互。

小部件将在卸载时删除,因此如果您的插件已安装并且您创建小部件的代码有效,那么您的小部件将在那里。 I.E.如果上述情况属实且您的小部件不存在,则检查其存在的代码也不存在。

但您仍然可以编写检查它的代码。如果widgetObj是全局变量,只需使用

if (widgetObj) console.log("Widget exists");

否则使用

var doc = require("sdk/window/utils").getMostRecentBrowserWindow().document;
if (doc.getElementById('addon-widget')) console.log("Widget exists");

也就是说,window utils模块是一个较低级别的模块,我已经读过它的使用可能会阻止你的插件被Mozilla批准,除非绝对必要。