javascript - Safari 扩展中的全局变量

标签 javascript safari global-variables safari-extension

我怎样才能在 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/

相关文章:

javascript - registerJS 中的数组到字符串转换 - Yii2

javascript - 如果用户不活动则运行 jQuery 超时函数

javascript - 基于所选页面在angularjs中显示/隐藏标题徽章

mongodb - SvelteKit 与 MongoDB ReferenceError : global is not defined

php - 我有一个 require ("config.php") 和数组,但仍然出现 undefined variable 错误

javascript - 欧拉计划 qn 23

javascript - 访问窗口历史记录对象中的 URL

javascript - window.scrollTo 是否在 Safari 中异步工作?

javascript - iPhone 的 safari 上的视频标签不会触发触摸事件

跨请求持久化的 PHP 全局变量