【问题标题】:Global Variable in safari extensionSafari 扩展中的全局变量
【发布时间】:2014-10-24 01:17:36
【问题描述】:

我怎样才能在 safari 扩展 中拥有一个可以从注入脚本中获得的全局变量, 并且可以在 safari 关闭后保存以供下次启动。

我所说的全局是静态的。
以便所有注入的脚本访问该变量的相同版本,而不是每个注入的脚本都有自己的。
不像每个域的 localStorage

【问题讨论】:

  • Safari 不支持从页面范围(注入脚本)访问全局范围内的内容,反之亦然。您必须使用 Messages 在这些范围之间共享内容。但是每个页面都可以从全局范围中获取相同内容的副本,这应该可以满足您的需求。

标签: javascript safari global-variables safari-extension


【解决方案1】:

Safari extension settings API 可能是最好的选择。这与 localStorage 类似,可通过safari.extension.settings 访问。

但是,这不能直接从注入的脚本访问,所以你必须use messages to pass data from a global page

在你注入的脚本中是这样的:

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 并重新打开它时,这个变量会保留它的最后一个值吗??
  • 是的。扩展设置在会话之间保持不变。
  • 谢谢,抱歉我最近不在,我使用了您的解决方案并在here 的 safari 开发人员文档中搜索了它
  • @MattSwain 我目前正在尝试访问全局页面包含的 JS 文件 background.js 中的 localStorage。我正在使用扩展生成器检查该文件,当我尝试在设置的断点处访问控制台中的 localStorage 时,它​​似乎是空的。关于如何访问所有站点的 localStorage 的任何想法?
猜你喜欢
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2012-03-25
相关资源
最近更新 更多