“XMLHttpRequest 不是构造函数”错误,与浏览器 chrome 内部使用的 Mozilla 文档相反
"XMLHttpRequest is not a constructor" error, contrary do Mozilla docs on usage inside browser chrome
我正在使用AddOn SDK构建一个Mozilla AddOn。我需要发布一个 AJAX 帖子,所以我正在使用 XMLHttpRequest
.在Mozilla的文档中,它说XMLHttpRequest
不能使用 XMLHttpRequest() 构造函数实例化。构造函数未在组件内部定义,代码会导致错误。解决此问题的最佳方法是使用 XPCOM 组件构造函数。
文档说要这样做:
const XMLHttpRequest = Components.Constructor["@mozilla.org/xmlextras/xmlhttprequest;1"];
var oReq = new XMLHttpRequest();
好。因此,我完全按照文档中所示的方式实现代码:
var { Cc, Cu, Ci, Cr, Cm, components } = require('chrome');
const XMLHttpRequest = components.Constructor["@mozilla.org/xmlextras/xmlhttprequest;1"];
. . .
var oReq = new XMLHttpRequest();
我在这一行上收到"XMLHttpRequest 不是构造函数"错误。
我错过了什么?我在这里做错了什么?我不能使用" Components.Constructor["@...
"的方式,因为生成.xpi
文件的AddOn SDK CLI工具抱怨,说
好的使用"组件"访问 chrome 权限。为此,您需要添加如下所示的行:
const {components} = require("chrome");
然后,您可以使用从"chrome"模块导入的任何属性快捷方式(分别为"类"、"接口"、"管理器"、"结果"和"utils"属性的"Cc"、"Ci"、"Cm"、"Cr"和"Cu"。
components
Components
对象本身)。
,好的。我确实在文件顶部有require(chrome)
调用,并生成快捷方式,然后有趣components
,这是正确的形式,并且来自 AddOn 编译器的消息说要使用。然而我得到了错误。
任何帮助非常感谢。
您应该使用附加 SDK 中的 request
模块。
如果您出于某种原因仍然想直接使用 nsIXMLHttpRequest
,请注意,在 SDK 模块中生成构造函数的正确方法是:
XMLHttpRequest = components.Constructor(
"@mozilla.org/xmlextras/xmlhttprequest;1",
"nsIXMLHttpRequest");
除了components.Constructor()
似乎在 SDK 中不起作用。所以最好直接创建一个实例:
var {Cc, Ci} = require('chrome');
var r = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].
createInstance(Ci.nsIXMLHttpRequest);
r.open("GET", "http://example.org/");
r.addEventListener("loadend", function(e) {
console.log(this, e, e.type, this.responseText);
});
r.send();
MDN wiki(!) 信息根本不正确。我现在编辑了文章并设置了"需要技术审查"标志。
或者:
const { XMLHttpRequest } = require('sdk/net/xhr');
let r = new XMLHttpRequest();
console.dir(r);
r.open("GET", "http://example.org/");
r.addEventListener("loadend", function(e) {
console.log(this, e, e.type, this.responseText);
});
r.send();
有关详细信息和限制,请参阅这些文档。
我像这样导入它:
var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
但我使用了 Node.js...
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调用函数内部的函数
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 在phonegap应用程序内部重定向不起作用
- 使用此选项选择父类内部的类
- 访问JSON对象内部的数组元素
- 从模块内部访问Express装载路径
- AngularJs指令,该指令创建内部有数据对象的新指令
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 如何使用内部对象构造对象
- 根据选项卡内部的文本链接中的哈希ID动态选择jqueryUI选项卡
- 用Javascript修改内部标记的CSS规则
- javascript函数内部的代码用逗号而不是分号分隔
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 光线投射从内部投射时不会碰到网格
- javascript无法重新定义函数内部的全局对象
- 在不移动内部文本的情况下缩放元素的效果
- Socket.io on Mozilla Rhino
- JavaScript goto 标签如何使用内部循环
- “XMLHttpRequest 不是构造函数”错误,与浏览器 chrome 内部使用的 Mozilla 文档相反