我远非 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 扩展程序的背景页面?