在Firefox附加组件中使用带有XMLHttpRequest的自定义协议

在Firefox附加组件中使用带有XMLHttpRequest的自定义协议,firefox,firefox-addon,firefox-addon-sdk,Firefox,Firefox Addon,Firefox Addon Sdk,我创建了一个定义自定义协议的插件;布拉布拉: 现在,blabla:**只需重定向到google.com即可,效果很好 但是,我想执行一个XMLHttpRequest来获取它应该重定向到的真实URL。但是,从我添加这一行的那一刻起(还没有其他内容),插件就停止工作: var-request=new-XMLHttpRequest(); 是否有我不知道的自定义协议插件的特殊规则?(例如没有xmlhttprequests)?这是没有办法的吗 var wheretogo=wheretogo(资源); v

我创建了一个定义自定义协议的插件;布拉布拉:

现在,
blabla:**
只需重定向到google.com即可,效果很好

但是,我想执行一个XMLHttpRequest来获取它应该重定向到的真实URL。但是,从我添加这一行的那一刻起(还没有其他内容),插件就停止工作:

var-request=new-XMLHttpRequest();
是否有我不知道的自定义协议插件的特殊规则?(例如没有xmlhttprequests)?这是没有办法的吗

var wheretogo=wheretogo(资源);
var uri=ioservice.newURI(wheretogo,null,null);
var channel=ioservice.newChannelFromURI(uri,null).QueryInterface(Ci.nsIHttpChannel);
函数(fres){
//var request=new XMLHttpRequest();
返回'http://google.com';
}
编辑:

我现在使用的代码是:

var-request=Components.classes[“@mozilla.org/xmlextas/xmlhttprequest;1”].createInstance(Components.interfaces.nsIXMLHttpRequest);
请求。打开(“获取”http://localhost:5000/?request=“+弗雷斯,假)//同步的
setRequestHeader(“内容类型”、“应用程序/json”);
请求发送(空);
但是得到这个错误:

[异常…”“故障”nsresult:“0x80004005(NS\u错误\u故障)”位置:“JS帧::file:///Users/wesley/Desktop/ProtocolFx/components/Protocol.js ::WhereToGo::第51行“数据:否]
你知道为什么这样不行吗?(是因为端口号吗?)我以为XMLHttpRequest可以在firefox插件中跨域访问


当我将其更改为fetch而不是localhost时,我将得到response.status 0和response.responseText“”

构造函数仅在DOM窗口的上下文中定义。如果您的代码在不同的上下文中运行(如SDK模块,它本质上是一个沙箱),则不会定义此构造函数,您必须通过XPCOM创建实例:

var{Cc,Ci}=require(“chrome”);
var request=Cc[“@mozilla.org/xmlextas/xmlhttprequest;1”]
.createInstance(Ci.nsIXMLHttpRequest);
供参考:


请注意,对于基于SDK的扩展,通常建议使用,如果禁用/卸载扩展,则使用具有自动取消请求的优点。还有一个底层接口提供了一个类似于本机
XMLHttpRequest
的接口,如果需要,它还将自动取消请求。但是,据我所知,这两种方法都不允许访问查找请求的“真实”URL所需的
XMLHttpRequest.channel
属性。

Palant-感谢您的帮助。我对firefox插件开发非常陌生。你的代码有帮助,但我还没有脱离困境。似乎我的xmlhttprequest没有正确执行。请参阅我的最新问题。我希望你对可能的原因有进一步的了解?@Wesley:这是你的协议处理程序中的一个例外,与你最初询问的问题非常不同。最好创建一个新问题,并提供一些关于如何实现协议的细节
XMLHttpRequest
似乎工作正常。