目标是检查小部件,如果它不存在,则创建一个小部件,如果它存在,则不执行任何操作。
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
答案 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批准,除非绝对必要。