1

我正在尝试从 Firefox 插件向我的服务器发出 ajax 请求,该服务器在本地运行:

$.ajax({type: "GET",url: "http://localhost:9000/getFoo?param=foo",

success: function (data) {
  console.log("response: " + data);
},
error: function(xhr, textStatus, errorThrown) {
  console.log("error! xhr status: " + xhr.status);
  console.log("error! textStatus: " + textStatus);
  console.log("error! errorThrown " + errorThrown);

}


});

如果我把它放在浏览器中,这个 url 可以正常工作,但是在附加组件中它执行错误回调,状态为 0,没有消息。

经过一番研究,我发现这似乎是跨域起源错误的症状(虽然,我不明白为什么)。这可以通过以下事实得到证实:在我正在修改的原始附加组件的代码中,(远程)url 作为参数发送到 yahooapis.com,而不是直接使用:

var q = encodeURIComponent('select * from html where url="'+url+'" and xpath='+"'//"+'td[contains(@class,"text")]'+"'"+' limit 1');
url = 'http://query.yahooapis.com/v1/public/yql?q='+q;

(有了这个,原始请求有效。我什至没有用我的测试,因为用 localhost 向雅虎发送查询似乎没有意义)。

那么我该如何处理呢?就我而言,jQuery 方式(这个)是唯一合适的。使用来自 SDK 的调用(忘记名称)有不同的可能性,这似乎可行,但我有一定的条件,因为我必须使用 JQuery 进行请求。我完全不明白为什么我在这里遇到跨域问题。我还盲目尝试将跨域标头添加到服务器的响应中,但没有效果。

谢谢。

编辑

这是我正在编辑的插件,如果有人想查看完整的代码:

https://builder.addons.mozilla.org/package/197498/

问题文件是 data/popup.js。

回答评论 - 我从 data/popup.js 调用它。该文件在面板中使用,在主 js 文件中初始化,如下所示(lib/main.js):

var mypanel = require("sdk/panel").Panel({
  width:370,
  height:60,
  contentURL: data.url("clock.html"),
  contentScriptFile:
    [data.url("jquery-1.10.2.min.js"), data.url("popup.js")],
  contentScript: "self.port.emit('resize', " +
                   "{width: document.documentElement.clientWidth, " +
                   "height: document.documentElement.clientHeight});"
}); 
4

1 回答 1

1

XMLHttpRequest并且$.ajax内容脚本受到同源策略/CORS的限制。

于 2013-08-17T22:17:14.053 回答