我怎样才能在 safari 扩展 中拥有一个可以从注入(inject)的脚本中访问的全局变量,
并且可以在 safari 关闭后保存以供下次启动。
我所说的全局是静态的。
这样所有注入(inject)的脚本都会访问该变量的相同版本,而不是每个注入(inject)的脚本都有自己的变量。
不像 localStorage 是按域划分的。
最佳答案
Safari extension settings API可能是最好的选择。这与 localStorage 的工作方式类似,可通过 safari.extension.settings
访问。
但是,这不能直接从注入(inject)脚本访问,因此您必须 use messages to pass data from a global page .
在你注入(inject)的脚本中是这样的:
safari.self.addEventListener('message', handleMessage, false);
safari.self.tab.dispatchMessage('getSetting', 'myVar');
function handleMessage(msg) {
if (msg.name === 'returnSetting') {
var setting = msg.message;
}
}
在你的全局页面中:
safari.application.addEventListener('message', handleMessage, false);
function handleMessage(msg) {
if (msg.name === 'getSetting') {
var setting = safari.extension.settings(msg.message);
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage('returnSetting', setting);
}
}
或者,您可以在全局页面的域内对 localStorage 执行或多或少相同的操作,因此它不限于一个域的网页。
关于javascript - Safari 扩展中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26527689/