我正在使用插件构建器创建一个firefox插件,我想从页面内容中保存一个值,然后从面板内容脚本中读取它。我想使用localStorage,但我尝试过,我无法在页面和面板脚本之间共享相同的localStorage。我也试过self.port.emit,这个方法工作得很好我可以用port.emit和port.on发送值,但这不是我想要的,因为我需要每秒刷新一次这个值,如果我使用该方法然后浏览器重载了端口请求,这就是为什么我想使用localStorage或者可以存储在变量中并且可以从面板脚本轻松访问的东西。
这里我附加了面板脚本,它将读取用页面脚本保存的值。
var panel = require("panel").Panel({
width: 100,
height: 100,
contentScriptFile: data.url("panel_script.js")
});
这里我附加了页面脚本,它将从页面内容中保存一个值,面板脚本将读取它。
var pageMod = require("page-mod");
pageMod.PageMod({
include: "*",
contentScriptFile: self.data.url("page_script.js"),
contentScriptWhen: 'ready'
});
答案 0 :(得分:2)
我相信port
系统是与Panel页面交互的推荐路线。但是,您可以通过Firefox插件解决您在页面访问localStorage
时遇到的问题。
var chrome = require('chrome');
var data = require('sdk/self').data;
var ios = chrome.Cc["@mozilla.org/network/io-service;1"]
.getService(chrome.Ci.nsIIOService);
var ssm = chrome.Cc["@mozilla.org/scriptsecuritymanager;1"]
.getService(chrome.Ci.nsIScriptSecurityManager);
var dsm = chrome.Cc["@mozilla.org/dom/storagemanager;1"]
.getService(chrome.Ci.nsIDOMStorageManager);
var uri = ios.newURI(data.url('index.html'), "", null);
var principal = ssm.getCodebasePrincipal(uri);
var storage = dsm.getLocalStorageForPrincipal(principal, data.url('index.html'));
通过它,您将能够像在网页中一样使用localStorage
对象访问页面的storage
。例如storage.setItem('key', 'value')
和storage.getItem('key')
。