如何使用Add-on SDK解析Firefox插件中的XML字符串

kri*_*ean 9 firefox-addon domparser firefox-addon-sdk

我正在尝试创建一个FF AddOn,它可以从网站上获取一些XML数据.但我找不到解析我的回应的方法.首先我使用DOMParser但是我收到此错误:

ReferenceError:未定义DOMParser.

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

错误:发生异常.回溯(最近一次调用最后一次):
文件"resource://jid0-a23vmnhgidl8wlymvolsst4ca98-at-jetpack/api-utils/lib/cuddlefish.js",第208行,在require let模块中,manifest = this.manifest [base], requirer = this.modules [base]; TypeError: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();

    }
});

};
Run Code Online (Sandbox Code Playgroud)

选项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);  
            }  
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

Wla*_*ant 14

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

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

nsIDOMParser文件.

也就是说,你的方法XMLHttpRequest应该也可以.您new错误地使用了操作符,但是正在创建一个新的"require对象".这样它应该工作:

var {XMLHttpRequest} = require("xhr");
var request = new XMLHttpRequest();
Run Code Online (Sandbox Code Playgroud)

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