1

我正在尝试制作一个Chrome扩展程序,该扩展程序将在我的Gmail中显示一个弹出窗口,其中包含来自外部服务器的一些信息,比如今天的天气。如何从content_script向外部网站发送请求

我已经试过

  1. 我都试过,包括Chrome扩展的JS,但随后试图使一个AJAX调用我的服务器违反同源策略。所以这个选项不起作用。
  2. 所以然后我试图保持我的js文件在服务器上并加载页面加载。

我的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如何做?

回答

1

我不知道为什么Cross-Origin XMLHttpRequest没有工作,因为扩展没有这样的限制像普通的网页,可以使用XMLHttpRequest对象从远程服务器发送和接收数据,并通过same origin policy是有限的。只要它首先请求跨源许可,扩展就可以与远程服务器进行通信。

参考文献:

示范

此示例代码使用背景页面,以XHR的另一个域。

的manifest.json

我确保清单包含所有可用的权限,也注册了一个背景页。

{ 
    "name": "Demo", 
    "description": "Sample Message Communication", 
    "version": "1", 
    "permissions": [ 
    "<all_urls>" 
    ], 
    "background": { 
    "scripts": ["background.js"] 
    }, 

    "manifest_version": 2 
} 

background.js

此示例代码做出一些随机的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); 
的请求
相关问题