gpt4 book ai didi

javascript - firefox插件中面板内容脚本和页面内容脚本之间的localStorage

转载 作者:行者123 更新时间:2023-12-02 18:53:09 25 4
gpt4 key购买 nike

我正在使用插件生成器创建一个 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'
});

最佳答案

我相信 port 系统是与面板页面交互的推荐途径。不过,您可以通过以下方法解决您发布的通过 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'));

这样,您就可以像通常在网页中一样使用 storage 对象访问页面的 localStorage。例如storage.setItem('key', 'value')storage.getItem('key')

关于javascript - firefox插件中面板内容脚本和页面内容脚本之间的localStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com