在localhost中使用Firefox附加组件的跨域原因错误?

时间:2013-08-17 21:57:21

标签: jquery ajax firefox-addon cross-domain

我正在尝试从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向yahoo发送查询似乎没有意义。)

那我怎么处理这个呢?对于我的情况,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});"
}); 

1 个答案:

答案 0 :(得分:1)

内容脚本中的

XMLHttpRequest$.ajax受同源策略/ CORS的限制。