9

我正在尝试创建一个从网站带来一些 XML 数据的 FF 插件。但我找不到解析我的响应的方法。首先我使用了 DOMParser 但我得到了这个错误:

ReferenceError: DOMParser 未定义。

有人建议使用 XMLHttpRequest,因为解析是自动完成的,但是我得到了另一个错误:

错误:发生异常。Traceback(最近一次调用最后一次):
文件“resource://jid0-a23vmnhgidl8wlymvolsst4ca98-at-jetpack/api-utils/lib/cuddlefish.js”,第 208 行,在 require let 模块中,manifest = this.manifest[base],需求者 = this.modules[base]; 类型错误:this.manifest 未定义

我真的不知道还能做什么。我必须注意,我正在使用 AddOn Builder 来实现这一点。

下面的代码似乎不起作用。

选项1:

exports.main = function() {

require("widget").Widget({
    id: "widgetID1",
    label: "My Mozilla Widget",
    contentURL: "http://www.mozilla.org/favicon.ico",
    onClick: function(event) {

    var Request = require("request").Request;
    var goblecontent = Request({
      url: "http://www.myexperiment.org/search.xml?query=goble",
      onComplete: function (response) {
        var parser = new DOMParser(); 
        var xml = parser.parseFromString(response.text, "application/xml");  

        var packs = xml.getElementsByTagName("packs");
        console.log(packs);
      }
    });

    goblecontent.get();

    }
});

};

选项 2:

exports.main = function() {
    require("widget").Widget({
        id: "widgetID1",
        label: "My Mozilla Widget",
        contentURL: "http://www.mozilla.org/favicon.ico",
        onClick: function(event) {

            var request = new require("xhr").XMLHttpRequest();
            request.open("GET", "http://www.myexperiment.org/search.xml?query=goble", false);
            request.send(null);  

            if (request.status === 200) {  
              console.log(request.responseText);  
            }  
        }
    });
};
4

2 回答 2

14

DOMParser构造函数未在 SDK 模块的上下文中定义。但是,您仍然可以使用chrome 权限获取它:

var {Cc, Ci} = require("chrome");
var parser = Cc["@mozilla.org/xmlextras/domparser;1"].createInstance(Ci.nsIDOMParser);

nsIDOMParser文档

也就是说,您的方法XMLHttpRequest也应该有效。但是,您错误地使用了new运算符,您编写它的方式正在创建一个新的“需要对象”。但是,这样它应该可以工作:

var {XMLHttpRequest} = require("xhr");
var request = new XMLHttpRequest();

但是请考虑使用异步XMLHttpRequest对象,用于request.onreadystatechange附加您的侦听器(该xhr模块目前不支持其他类型的侦听器或addEventListener)。

于 2012-02-07T08:18:02.670 回答
3

如果您使用XMLHttpRequest(可通过xhr 模块获得),您可以轻松避免使用DOMParser. 下面我提供一个示例,假设request是一个XMLHttpRequest请求成功完成的对象:

代替:

var parser = new DOMParser(); 
var xmlDoc = parser.parseFromString(request.responseText, "application/xml");  

利用:

var xmlDoc = request.responseXML;  

然后你可以:

var packs = xmlDoc.getElementsByTagName("packs");
console.log(packs);

管他呢。

于 2012-10-26T15:00:18.777 回答