2012-01-02 92 views
9

我正在编写一个FireFox扩展,希望从服务器加载数据。但是,当我尝试初始化了XMLHttpRequest:Firefox扩展中的XMLHttpRequest

var request = new XMLHttpRequest(); 

错误控制台说:

ReferenceError: XMLHttpRequest is not defined 

我必须包括一些或为什么XMLTttpRequest无法识别?

+1

是一个JavaScript模块内部的代码信息?如果是这样,看看https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Using_XMLHttpRequest_from_JavaScript_modules_.2F_XPCOM.C2.A0components – 2012-01-02 12:06:20

+0

嗨费利克斯!我在函数内的main.js中使用它。但是当我这样做时,附加组件构建器会说'不能复制xpi文件'... – SteMa 2012-01-02 12:11:12

+0

您是否在使用新的插件SDK?如果是这样,我还没有使用它,所以我不能帮你。抱歉。 – 2012-01-02 12:12:52

回答

10

附加SDK(通过附加组件生成器间接使用)提供了一个request package,它本质上是一个围绕XMLHttpRequest的包装,您应该使用它。根据我的理解,如果在执行请求时卸载/禁用附加组件,则无法直接访问XMLHttpRequest访问权限。

1

看来弗拉基米尔的答案对于大多数这样的情况是有用的。但还有一个案例。

我发现在尝试解决Firefox下16怪该错误的问题三页,但我从来没有Firefox的15岁以下的看到这个错误

我得到这个错误在内容上的脚本部分页面。该脚本在开始时注入:

contentScriptWhen : "start", 

它看起来像在某些情况下窗口对象未正确初始化。所以,我刚刚改变了从头到尾的脚本加载。对我而言是可能的。问题已经消失...

我不知道它为什么会出现,但知道解决方案并希望它对某人有用。

3

对于使用XMLHttpRequest的构造函数,你应该添加XPCOM组件构造:

const XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1", "nsIXMLHttpRequest"); 

后:

// some code 
var req = new XMLHttpRequest(); 
// some code 

更多关于MDN