Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript safari扩展中的全局变量_Javascript_Safari_Global Variables_Safari Extension - Fatal编程技术网

Javascript safari扩展中的全局变量

Javascript safari扩展中的全局变量,javascript,safari,global-variables,safari-extension,Javascript,Safari,Global Variables,Safari Extension,如何在safari extension中拥有一个可以从注入脚本加入的全局变量, 并且可以在safari关闭后保存以备下次发布。 全局指的是静态的。 因此,所有注入的脚本都可以访问该变量的同一版本,而不是每个注入的脚本都有自己的版本。 而不是像本地存储那样按域存储。这可能是最好的选择。这与localStorage的工作原理类似,可以通过safari.extension.settings访问 但是,这不能直接从注入的脚本访问,所以您必须这样做 在注入的脚本中类似于以下内容: safari.self.

如何在safari extension中拥有一个可以从注入脚本加入的全局变量, 并且可以在safari关闭后保存以备下次发布。

全局指的是静态的。
因此,所有注入的脚本都可以访问该变量的同一版本,而不是每个注入的脚本都有自己的版本。
而不是像本地存储那样按域存储。

这可能是最好的选择。这与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时,它似乎是空的。关于如何访问所有站点的本地存储有什么想法吗?