我正在開發使用SDK的我的加載項(定位Gmail)的新版本,並需要爲我的用戶存儲一些布爾首選項。要做到這一點,我想玩一下新的「簡單首選項」API。基於Mozilla documentation和這Stackoverflow question,我得到的東西,但我面臨以下問題:使用簡單首選項(SDK API)與外部腳本和postMessage
1)我不能讓我的首選項的更改被正確傳遞到我的外部腳本的數據。我需要禁用並重新啓用插件才能應用更改。
2)如何確保首選項直接應用於打開Gmail的選項卡。
這裏是我的package.json:
{
"name": "Demo",
"license": "MPL 1.1/GPL 2.0/LGPL 2.1",
"author": "me",
...
"preferences": [{
"type": "bool",
"name": "option1",
"value": true,
"title": "Description Option1"
},
{
"type": "bool",
"name": "option2",
"value": true,
"title": "Description Option2"
}]
}
我main.js:
const pageMod = require("page-mod");
const data = require("self").data;
const prefSet = require("simple-prefs");
// Get the values for options
var option1 = prefSet.prefs.option1;
var option2 = prefSet.prefs.option2;
// Listen for changes
function onPrefChange(prefName) { prefSet.prefs[prefName]; }
prefSet.on("option1", onPrefChange);
prefSet.on("option2", onPrefChange);
exports.main = function() {
pageMod.PageMod({
include: ["https://mail.google.com/*","http://mail.google.com/*"],
contentScriptWhen: 'ready',
contentScriptFile: [data.url("jquery.js"),data.url("script.js")],
onAttach: function(worker)
{
worker.postMessage(option1);
worker.postMessage(option2);
}
});
}
我的script.js(數據):
(function(){
// Option 1
self.on("message", function(option1) {
if(option1 == true) {
// Do this
}});
// Option 2
self.on("message", function(option2) {
if(option2 == true) {
// Do this
}});
})();
當然有整潔的方式在我的main.js文件中使用postMessage協議,並在我的script.js文件中調用它...隨時提出您的想法和建議!
謝謝@canuckistani。慢慢到達那裏。不過,使用我的外部腳本和postMessage仍然有一些困難。 – flo 2012-04-16 11:41:27
究竟有什麼困難?如果有幫助,我的代碼發佈在這裏:https://github.com/canuckistani/Pref-changes – canuckistani 2012-04-17 01:10:02