8
我正在使用新的FireFox Addons SDK來開發擴展。我有一個小部件,附有面板。該面板用於控制首選項,因此我需要從面板的內容腳本訪問簡單存儲API。我知道你不能直接訪問API,所以我試圖使用消息傳遞。繼承人什麼我有:Firefox Addons SDK - 如何從內容腳本訪問簡單存儲?
exports.main = function() {
var panel = require('panel');
var ss = require('simple-storage');
var prefPanel = panel.Panel({
contentURL: self.data.url('prefPanel.html'),
contentScriptFile: self.data.url('prefPanel.js'),
contentScriptWhen: 'ready',
onMessage: function(message) {
switch(message.method) {
case 'setValue':
ss.storage[message.key] = message.value;
}
},
});
prefPanel.postMessage(ss.storage);
require('widget').Widget({
id: 'ml-pref-button',
content: 'ML',
width: 30,
panel: prefPanel,
})
}
和prefPanel.js我有:
Error: An exception occurred.
Traceback (most recent call last):
File "resource://jid0-wdemwzahwzh3bsw0kkxlcjg9e7k-at-jetpack-api-utils-lib/content/worker.js", line 405, in postMessage
throw new Error(ERR_DESTROYED);
Error: The page has been destroyed and can no longer be used.
我猜:
self.on('message', function(storage) {
storage.setValue = function(key, value) {
this[key] = value;
self.postMessage({
method: 'setValue',
'key': key,
'value': value,
});
}
// Do some stuff, using storage object
});
的問題是,我得到這個錯誤這是因爲prefPanel DOM和內容腳本尚未加載。 DOM和內容腳本是在每次顯示面板時重新加載的,還是總是在後臺運行?