Javascript safari扩展中的全局变量
如何在safari extension中拥有一个可以从注入脚本加入的全局变量, 并且可以在safari关闭后保存以备下次发布。Javascript safari扩展中的全局变量,javascript,safari,global-variables,safari-extension,Javascript,Safari,Global Variables,Safari Extension,如何在safari extension中拥有一个可以从注入脚本加入的全局变量, 并且可以在safari关闭后保存以备下次发布。 全局指的是静态的。 因此,所有注入的脚本都可以访问该变量的同一版本,而不是每个注入的脚本都有自己的版本。 而不是像本地存储那样按域存储。这可能是最好的选择。这与localStorage的工作原理类似,可以通过safari.extension.settings访问 但是,这不能直接从注入的脚本访问,所以您必须这样做 在注入的脚本中类似于以下内容: safari.self.
全局指的是静态的。
因此,所有注入的脚本都可以访问该变量的同一版本,而不是每个注入的脚本都有自己的版本。
而不是像本地存储那样按域存储。这可能是最好的选择。这与localStorage的工作原理类似,可以通过
safari.extension.settings
访问
但是,这不能直接从注入的脚本访问,所以您必须这样做
在注入的脚本中类似于以下内容:
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执行或多或少相同的操作,这样就不局限于一个域的网页。Safari不支持从页面范围(注入脚本)访问全局范围内的内容,反之亦然。您必须使用在这些作用域之间共享内容。但是每个页面都可以从全局范围获得相同内容的副本,这应该满足您的需要。非常感谢,但是当我关闭safari并重新打开它时,这个变量会保留它的最后一个值吗?是的。扩展设置在会话之间保持不变。谢谢,伙计,很抱歉我最近不在,我使用了你的解决方案,并在@MattSwain的safari developer文档中搜索了它。我目前正在尝试访问全局页面包含的JS文件
background.JS
中的本地存储。我正在使用extension builder检查该文件,当我试图在控制台中的设置断点处访问localStorage时,它似乎是空的。关于如何访问所有站点的本地存储有什么想法吗?