2013-12-09 49 views
0

目標是檢查一個小部件,如果它不存在,創建一個,如果它確實存在,則什麼也不做。

main.sj設置了一個小部件。
向內容腳本發送消息。
內容腳本檢查元素與idaddon-widget但輸出null,爲什麼?使用addon sdk檢查小部件是否存在?

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

>爲什麼在控制檯上空輸出?: 很空,因爲在與ID爲「插件的小部件」的網頁沒有任何元素。 您是否想要檢查自己的小部件或其他插件的小部件?我試圖理解你的用例。 – canuckistani

+0

我試圖檢查我自己的小部件是否存在 – bobbyrne01

回答

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"); 

也就是說,窗口utils的模塊是一個較低的水平模塊和我讀過它的使用可以防止您的添加 - 除非絕對必要,否則不會被Mozilla批准。

+0

這個工作,然後我使用'widgetObj.destroy();'從插件欄中刪除 – bobbyrne01