firefox-addon - 如何使用附加 SDK 解析 Firefox 插件中的 XML 字符串

标签 firefox-addon firefox-addon-sdk domparser

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

ReferenceError: DOMParser is not defined.



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

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



我真的不知道还能做什么。我必须注意,我正在使用 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);  
            }  
        }
    });
};

最佳答案

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

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

nsIDOMParser documentation .

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

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

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

关于firefox-addon - 如何使用附加 SDK 解析 Firefox 插件中的 XML 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9171590/

相关文章:

javascript - 如何从 Firefox 附加 SDK 扩展启动正常下载

javascript - AngularJS:将 XML 字符串加载到 XML 文档

javascript - Firefox 扩展中 JavaScript 中的 HTTP POST

firefox - 从传统的基于 XUL 的附加组件中访问附加 SDK?

javascript - 用于将 XML 转换为 XHTML 的 Firefox 附加组件

javascript - 在 Web Worker 中解析 XML

javascript - 创建新的 DOMParser 实例有什么意义?

firefox - 如何阅读 Firefox 日志

google-chrome-extension - 如何从 webpack 构建中删除 eval 和 Function 构造函数以避免 CSP 问题

javascript - Firefox 附加组件声明功能并在内容脚本中使用