2015-02-05 89 views
0

我为一个特定的网站写了一个Chrome扩展。如果安装的延伸和我浏览到该网站“example.com”,我的分机呼叫以下方法:从选项页面调用Chrome扩展方法?

var search="john"; 
$.get("https://www.example.com/complete/search?q="+search, function (data) { 
     console.log(data); 
    }); 

这工作得很好。

现在我必须从该扩展的选项页面中调用相同的方法。当我这样做,我收到以下错误:

XMLHttpRequest cannot load https://www.example.com/complete/search?q=John . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost ' is therefore not allowed access.

我理解为什么会这样,但必须找到一个办法来解决这个问题。我的想法是触发扩展脚本来调用该方法,然后将结果返回到选项页面。我期望,chrome.runtime.sendMessage()在这里没有帮助。

不用说:该域名不是由我托管的,所以我不能只更改标题。

回答

1

的错误指示它不是实际选项页:而不是打开扩展名为打包的页面:你通过本地网络服务器(http://localhost/原点)打开它(可能是意外)。

  1. 你需要你的页面(比如,options.html)添加到您的扩展文件夹
  2. 你需要将其添加到清单类似"options_page": "options.html"或更好,但with options_ui
  3. 您需要重新加载扩展应用清单更改
  4. 您需要通过扩展名打开它,例如通过chrome://extensions或您的分机按钮的上下文菜单(如果有)
+0

天哪。你是对的。我无意中在本地打开了这个文件。但是,期望在我的选项页面上出现相同的行为,因为这不是www.example.com。 – 2015-02-05 22:42:01

+1

从安全角度来看,背景页面和选项页面是相同的(特权源'chrome-extension:// ...')。这意味着在清单中定义的主机权限[覆盖XHR的CORS](https://developer.chrome.com/extensions/xhr#requesting-permission)。 – Xan 2015-02-05 22:45:43