Как проанализировать строку XML в дополнении Firefox с помощью SDK надстройки - PullRequest
9 голосов
/ 07 февраля 2012

Я пытаюсь создать надстройку FF, которая приносит некоторые данные 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];Ошибка типа: 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);  
            }  
        }
    });
};

Ответы [ 2 ]

14 голосов
/ 07 февраля 2012
Конструктор

DOMParser не определен в контексте модулей SDK.Вы все еще можете получить его, используя Chrome Authority , однако:

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).

3 голосов
/ 26 октября 2012

Если вы используете 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);

Или что угодно.

...