如何使用附加SDK解析Firefox插件中的XML字符串 [英] How to parse a XML string in a Firefox addon using Add-on SDK

查看:161
本文介绍了如何使用附加SDK解析Firefox插件中的XML字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个FF AddOn,它可以从网站中获取一些XML数据。但是我找不到解析我的RESPONSE的方法。首先我使用了DOMParser,但是我得到了这个错误:

lockquote
ReferenceError DOMParser没有定义


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

lockquote

错误:发生异常。追溯(最近一次调用最后):

文件
资源://jid0-a23vmnhgidl8wlymvolsst4ca98-at-jetpack/api-utils/lib/cuddlefish.js,
第208行,在require
let module,manifest = this.manifest [base],requirer = this.modules [base]; TypeError:this.manifest是未定义的


我真的不知道该怎么做。我必须注意到,我正在使用AddOn生成器来实现这一点。



下面的代码看起来没有用。



选项1:
$ b

  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);
}
}
});
};


解决方案

DOMParser 构造函数没有在SDK模块的上下文中定义。您仍然可以使用 chrome但是:
$ b

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

nsIDOMParser 文档



也就是说,您的方法是使用 XMLHttpRequest 也应该可以工作。您错误地使用了 new 操作符,但是您正在创建一个新的require对象的方式。然而,这种方式应该是可行的:
$ b

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

请考虑使用异步 XMLHttpRequest 对象,使用 request.onreadystatechange 来附加你的监听器( xhr 模块目前不支持其他类型的监听器, code> addEventListener )。


I am trying to create a FF AddOn that brings some XML data from a website. But I can't find a way to parse my RESPONSE. First I used DOMParser but I get this error:

ReferenceError: DOMParser is not defined.

Someone suggested to use XMLHttpRequest, because the parsing is done automatically but then I get this other error:

Error: An exception occurred. Traceback (most recent call last):
File "resource://jid0-a23vmnhgidl8wlymvolsst4ca98-at-jetpack/api-utils/lib/cuddlefish.js", line 208, in require let module, manifest = this.manifest[base], requirer = this.modules[base]; TypeError: this.manifest is undefined

I really don't know what else to do. I must note that I am using the AddOn Builder to achieve this.

Below the code that doesn't seem to work.

Option 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();

    }
});

};

Option 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);  
            }  
        }
    });
};

解决方案

DOMParser constructor isn't defined in the context of SDK modules. You can still get it using chrome authority however:

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

nsIDOMParser documentation.

That said, your approach with XMLHttpRequest should work as well. You used the new operator incorrectly however, the way you wrote it a new "require object" is being created. This way it should work however:

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

Please consider using an asynchronous XMLHttpRequest object however, use request.onreadystatechange to attach your listener (the xhr module currently doesn't support other types of listeners or addEventListener).

这篇关于如何使用附加SDK解析Firefox插件中的XML字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆