1

当我在 popup.html 中加载 https 文件时,会出现明显的延迟。

为了规避这个问题,我如何在 background.js 中放置一个函数,每次打开浏览器时,它都会获取版本号并将其存储在本地?

然后,一旦存储在本地,尝试获取此内部资源时没有延迟(与每次单击扩展弹出按钮时尝试加载外部 https javascript 文件相反)。

在那之后,我怎样才能在popup.html中调用所说的内部资源?

摘要:
* 如何在每次初始浏览器加载时获取远程文本值?
* 如何在本地存储该值?
* 如何获取现在本地存储的数字以显示在 popup.html 中?

整个外部文件就是这样:

function myVersion1(){ return "1.0"; }

换句话说,我想在本地存储 1.0 的值,以便稍后在 popup.html 中调用。然后假设我将外部文件中的数字更改为 2.0,然后我希望扩展程序查询它并将本地存储的以前的 1.0 更新为下次用户打开浏览器时的 2.0。

4

2 回答 2

1

您将使用 Chrome 本地存储,您将存储如下值:

chrome.storage.local.set({'foo': bar});

并像这样检索它:

chrome.storage.local.get('foo', function (result) {
    var foo = result['foo'];
    if(typeof foo === 'undefined') // not set
});

如果这样做,则需要将其添加到清单文件中:

"permissions" : ["storage"],
于 2013-08-29T21:55:50.957 回答
0

我远非 Chrome 扩展专家,但我想集成到 Chrome 扩展中的第 3 方简单的基于远程 HTTP 的服务存在部分类似的问题。这可能对外部域查询部分有所帮助,您可以将其与 Matthew Riches 的本地存储建议结合使用。

从我的 popup.js 中,我包含了对远程服务器的 AJAX 请求。如果需要,您可以按时间间隔从 background.js 执行它。

var status = "http://192.168.1.28:8081/";
window.onload = function(){
$.ajax({
      type: 'GET',
      url: status,
      dataType: 'html',
      success: function(data) {
          try {
            // Do what you want with the data, like local storage, etc...
          } catch(e) {
            $('#status').text("Error: " + e.message);
            return;
          }
      }
});

}

不过,您需要在 manifest.json 中为远程服务器的域/IP 添加“权限”。如果您没有这样的 AJAX 请求,将被视为跨域请求安全违规。例如,通常不允许您在幕后从另一个域(如 www.google.com)请求数据,从 www.mybadsite.com 加载 AJAX。

{
  "name": "Test",
  "version": "0",
  "background": {"page": "background.html"},
  "manifest_version": 2,
  "browser_action": {
    "default_title": "Test",
    "default_popup": "status.html",
    "icons": ["icon.png"],
    "default_icon": "icon.png"
  },
  "content_scripts": [ {
    "js": [ "jquery.js", "content.js" ],
    "css": ["customStyles.css"],
    "matches": [ "http://*"]
  }],
  "permissions": [
      "http://192.168.1.28/"
  ]
}

还有其他在内容脚本之间共享数据的方法。您可以将事件侦听器添加到 DOM/文档,然后从其他正在运行的地方分派给它,例如 background.js 和 popup.js。这是另一个 SO 帖子,其中包含一个有效的简单示例:(请注意,它与外部查询无关,有关更多信息,请参见我上面的注释,或搜索 CORS)

如何将数据从远程窗口传回 chrome 扩展程序的背景页面?

于 2013-11-23T20:04:41.627 回答