这是我第一次开发Google Chrome Extentions,我的目标是从我在本地计算机上托管的REST服务中检索URL,并在弹出窗口中显示...这是我使用的代码:
<style>
body {
min-width:357px;
overflow-x:hidden;
}
</style>
<script>
var req = new XMLHttpRequest();
req.open(
"GET",
"http://URLTORESTSERVICE/Items",
true);
req.onload = showWorklistItems;
req.send(null);
function showWorklistItems() {
var worklistitems = req.responseXML.getElementsByTagName("WorklistItem");
for (var i = 0, wli; wli = worklistitems[i]; i++) {
var link = document.createElement('a');
link.setAttribute('href', constructWLIURL(wli));
document.body.appendChild(link);
}
}
function constructWLIURL(wli) {
return "testing" + wli.getAttribute("SerialNumber");
}
</script>
但是当我执行时出现此错误:
XMLHttpRequest cannot load http://URLTORESTSERVICE/Items. Origin chrome-extension://caioejefhikijgcaondigdaaobomailk is not allowed by Access-Control-Allow-Origin.
答案 0 :(得分:3)
您正在进行CORS或“跨域资源共享”。 http://enable-cors.org/是该主题的良好资源。它是由您的请求不是源自与数据服务相同的域。
为了使用来自其他域的ajax请求中的数据,您需要让数据提供者在其http响应中添加类似于以下内容的CORS头。 (注意:JSONP虽然很危险,但可以解决这个问题。)
Access-Control-Allow-Origin: *
编辑:我看到你是数据提供者 - 输出那个标题,你就可以了。
答案 1 :(得分:0)
Access-Control-Allow-Origin
是您的服务器发送(或不发送)的标头。某些浏览器(特别是Chrome和Firefox)在跨域请求方面尊重此标头。这意味着除非原始域列在该标题中,否则浏览器将拒绝执行请求(或至少完全执行)。
您可以更改本地服务器以正确设置标头,或者您可能会以某种方式更改chrome的设置以停止将您正在执行的操作视为跨域请求。