2012-06-01 72 views
1

我正在嘗試使用Firefox Addon Builder創建Firefox插件。firefox插件,將數據保存在簡單存儲中

我無法確定我可以如何將數據保存在「簡單存儲」中。

main.js

var data = require("self").data; 

var ss = require("simple-storage"); 
if(typeof(ss.storage.bl) === 'undefined') { 
    ss.storage.bl = []; 
} 
blacklist = ss.storage.bl; 

exports.main = function(){ 
    var pageMod = require("page-mod"); 
    pageMod.PageMod({ 
     include: "*", 
     contentScriptWhen: 'end', 
     contentScriptFile: [data.url("jquery.min.js")] 
    }); 

    var contextmenu = require("context-menu"); 
    contextmenu.Item({ 
     label: "block", 
     context: contextmenu.SelectorContext("a[href]"), 
     contentScriptFile: [data.url("jquery.min.js"),data.url("onclick.js"),data.url("core.js")]  
    }); 
}; 

onclick.js

self.on("click", function (node) { 
    user = node.href.substring(node.href.lastIndexOf('/') + 1); 

    blacklist.push(user); 

    blockthis(); 
}); 

收到此錯誤的所有時間:

onclick.js, line 4
in blacklist.push(user)
ReferenceError: blacklist is not defined

鏈接:https://builder.addons.mozilla.org/addon/1054941/latest/

回答

2

內容腳本和擴展代碼不會在相同的上下文中運行 - 它們不共享任何變量,因此您無法在上下文中簡單地訪問擴展中的變量。另外,您不能在內容腳本中使用SDK模塊。內容腳本應該將消息發送回擴展,讓它執行所有必須的操作:

self.on("click", function (node) { 
    user = node.href.substring(node.href.lastIndexOf('/') + 1); 
    self.postMessage(user); 
    blockthis(); 
}); 

而且在main.js

contextmenu.Item({ 
    label: "block", 
    context: contextmenu.SelectorContext("a[href]"), 
    contentScriptFile: [data.url("jquery.min.js"),data.url("onclick.js"),data.url("core.js")], 
    onMessage: function(user) 
    { 
     blacklist.push(user); 
    } 
}); 

Further information

+0

感謝您的幫助:),但現在我還有一個問題。 這就是說,「blockthis();沒有定義」,它在「core.js」中,它位於「黑名單」中。 ()。parent_()。parent(); parent()。parent(); parent()。parent()。 blocked_div.find('img')。hide(); } } blockthis(); 看起來像我不能只寫在main.js,它使用一些jQuery的功能。我該如何解決它? – user1093555

+0

我想'blockthis()'調用必須留在內容腳本中,只有內容腳本可以訪問網頁。我只是移動它,因爲我不知道它在做什麼。 –

+0

如果您需要在內容腳本中使用'blacklist',那麼您將不得不通過'main.js'發送它。但是你可能會使用'page-mod'來注入這個內容腳本 - 與上下文菜單相關的內容腳本不是持久的,恕我直言不能接收消息。 –