9

WebサイトからいくつかのXMLデータを取得するFFアドオンを作成しようとしています。しかし、RESPONSEを解析する方法が見つかりません。最初にDOMParserを使用しましたが、次のエラーが発生します。

ReferenceError:DOMParserが定義されていません。

解析が自動的に行われるため、誰かがXMLHttpRequestを使用することを提案しましたが、次の別のエラーが発生します。

エラー:例外が発生しました。トレースバック(最後の最後の呼び出し):
ファイル "resource://jid0-a23vmnhgidl8wlymvolsst4ca98-at-jetpack/api-utils/lib/cuddlefish.js"、行208、require let module、manifest = this.manifest [base]、 requirer = this.modules [base]; TypeError:this.manifestは未定義です

私は本当に他に何をすべきかわかりません。これを実現するためにアドオンビルダーを使用していることに注意する必要があります。

動作していないように見えるコードの下。

オプション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が、それを記述した方法で新しい「requireobject」が作成されています。ただし、このように機能するはずです。

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

非同期XMLHttpRequestオブジェクトの使用を検討してください。ただし、request.onreadystatechangeリスナーをアタッチするために使用してください(xhrモジュールは現在、他のタイプのリスナーまたはをサポートしていませんaddEventListener)。

于 2012-02-07T08:18:02.670 に答える
3

( xhrモジュールXMLHttpRequestを介して利用可能)を使用する場合は、の使用を簡単に回避できます。以下に、リクエストが正常に完了したオブジェクトを想定した例を示します。DOMParserrequestXMLHttpRequest

それ以外の:

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 に答える