问题是:我需要向某些主机(例如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:我试图用
显示Requestvar Request = require("request").Request;
worker.port.emit('message', Request);
它没有返回任何东西 - 似乎是Request模块的问题(或者包含这个模块的方式)。纯XMLHttpRequest也不起作用。 UPD5:使用最新的SDK console.log(response.toSource())返回空对象:
info: test3: Response:({})
答案 0 :(得分:2)
问题确实非常愚蠢 - 使用response.text
而不仅仅是“回复”。