我正在尝试制作一个Chrome扩展程序,它会在我的Gmail中显示一个弹出窗口,其中包含来自我的外部服务器的一些信息,比如今天的天气。
我尝试了什么
我的manifest.json看起来像这样:
{
"name": "cvnosnvsdionfois",
"version": "0.1.0",
"manifest_version": 2,
"description": "sldnfksdngsdngods",
"browser_action": {
"default_icon": "images/icon.png"
},
"permissions": [
"http://api.flickr.com/", "webRequest",
"tabs",
"http://*localhost:8080*"
],
"content_scripts": [
{
"matches": ["https://mail.google.com/*"],
"js": ["http://localhost:8080/static/response.js"]
}
]
}
我在其他地方读过内容脚本不能包含在外部URL中,因此我认为这不起作用。这里有什么正确的方法。如何在Gmail中运行一些可以从我的服务器请求信息的JavaScript代码?例如,Smartr如何做到这一点?
答案 0 :(得分:1)
我不确定为什么Cross-Origin XMLHttpRequest不能正常工作,因为Extensions并不像普通网页那样有限,可以使用XMLHttpRequest对象从远程服务器发送和接收数据并且受限于same origin policy。扩展可以与其来源之外的远程服务器通信,只要它首先请求跨源权限。
此示例代码使用背景页面为另一个域创建XHR。
我确保清单具有所有可用权限,并且还注册了背景页。
{
"name": "Demo",
"description": "Sample Message Communication",
"version": "1",
"permissions": [
"<all_urls>"
],
"background": {
"scripts": ["background.js"]
},
"manifest_version": 2
}
此示例代码请求一些随机的asp页面
function makeXHR() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function (data) {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
console.log("Response is received");
}
} else {
//callback(null);
}
}
var url = 'http://www.w3schools.com/html/default.asp';
xhr.open('GET', url, true);
xhr.send();
}
document.addEventListener("DOMContentLoaded", makeXHR);