Firefox Addon中的内容脚本和跨域请求

时间:2012-12-24 15:52:31

标签: javascript ajax firefox-addon cross-domain same-origin-policy

问题是:我需要向某些主机(例如alexa.com)执行AJAX请求。在Chrome中一切都很好,但在Firefox中我收到空虚作为响应,状态为200.我认为,这是因为同源策略 - 但我发现Firefox插件可以执行此类请求,但不是来自“内容脚本”。我无法理解,如何将此请求移动到“非内容脚本”并将响应返回到“内容脚本”。

感谢。

UPD:我发现如何将信息传递给内容脚本 - port.emit()工作正常。现在仍有疑问 - 如何从插件脚本执行AJAX。

var Request = require("request").Request;
    Request({
        url: "http://*****" + url,
        onComplete: function (response) {
            worker.port.emit('message', response);
        }
    }).get();

似乎没有工作 - 内容脚本没有得到回复。抱歉,我不确定如何向控制台收到错误消息。另外,有没有办法让它非同步?

UPD2:我仍然不知道如何让Request工作。我试图从内容脚本的请求中提醒错误,它似乎实际上不是“同源”:

{
    "readyState": 0,
    "status": 0,
    "statusText": "[Exception... \"Failure\"  nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"  location: \"JS frame :: resource://jid0-alfzkx8ttazxkergga4i8vsf5re-at-jetpack/api-utils/lib/loader.js -> resource://jid0-alfzkx8ttazxkergga4i8vsf5re-at-jetpack/api-utils/lib/sandbox.js -> resource://jid0-alfzkx8ttazxkergga4i8vsf5re-at-jetpack/api-utils/lib/content/content-proxy.js :: <TOP_LEVEL> :: line 106\"  data: no]"
}

UPD3:好的,我知道了 - 这是因为Firefox完全禁止来自内容脚本的任何请求。 UPD4:我试图用

显示Request
var Request = require("request").Request;
worker.port.emit('message', Request);

它没有返回任何东西 - 似乎是Request模块的问题(或者包含这个模块的方式)。纯XMLHttpRequest也不起作用。 UPD5:使用最新的SDK console.log(response.toSource())返回空对象:

info: test3: Response:({})

1 个答案:

答案 0 :(得分:2)

问题确实非常愚蠢 - 使用response.text而不仅仅是“回复”。