我正在尝试从Chrome扩展程序中发布到localhost服务器,但它似乎无法正常工作。
以下是我的文件:
清单:
{
"name": "Send to server",
"version": "1.1",
"background": { "page": "background.html"},
"permissions": ["experimental", "tabs", "<all_urls>"],
"browser_action": {"name": "Send to server", "default_icon": "icon.png", "default_popup":"popup.html" },
"icons": { "16": "16.png" },
"manifest_version": 2
}
background.html非常简短,它只是指向“http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js” 并 “background.js”。 (我使用它只是为了能够包含JQuery并在background.js中使用它。还有另一种方法吗?)
background.js:
chrome.tabs.onUpdated.addListener(SendToServer);
function SendToServer(tabId, changeInfo, tab) {
chrome.tabs.getSelected(null, function(tab) {
if (changeInfo.status === 'complete'){
chrome.experimental.infobars.show({
tabId: tab.id,
path: "infobar.html"
});
var strVar = "A page was loaded";
alert("Before sending: " + strVar);
$.post("http://localhost/MyDomain", {var: strVar},
function(strVar ) { alert("Sending..."); }
);
}
})
};
现在,提醒(“发送前:”+ strVar);执行,所以直到这里我做得很好。但.post没有完成。
有什么想法吗?
谢谢,
答案 0 :(得分:0)
如果您调试后台页面,您会发现存在安全性错误。您正尝试从远程源(ajax.googleapis.com)加载javascript,而您尚未在清单文件中明确允许此操作。没有jQuery,$.post
无法运行。您需要放宽默认Content Security Policy(确保通过https加载jQuery)。
事实上,在这种特定情况下你应该实际做的是在你的扩展中包含jQuery文件并在backtround.html
中相应地加载它。扩展不是一个网站,与简单的HDD获取相比,远程调用需要花费大量时间。此外,当没有互联网连接时,使用远程javascript文件会使扩展无法使用/不稳定。