2012-02-07 16 views
9

का उपयोग कर फ़ायरफ़ॉक्स एडन में एक्सएमएल स्ट्रिंग का विश्लेषण कैसे करें मैं एक एफएफ एडऑन बनाने की कोशिश कर रहा हूं जो किसी वेबसाइट से कुछ एक्सएमएल डेटा लाता है। लेकिन मुझे अपने उत्तरदायित्व का विश्लेषण करने का कोई तरीका नहीं मिल रहा है। सबसे पहले मैं 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 बिल्डर का उपयोग कर रहा हूं।

उस कोड के नीचे जो काम नहीं करता है।

विकल्प 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); 
      } 
     } 
    }); 
}; 

उत्तर

14

DOMParser निर्माता एसडीके मॉड्यूल के संदर्भ में परिभाषित नहीं है। तुम अब भी हालांकि 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 के अन्य प्रकार का समर्थन नहीं करता)।

+1

+1 अपने उपयोगकर्ताओं के लिए कृपया किसी भी प्रकार की सिंक्रोनस नेटवर्क पहुंच से बचें! – canuckistani

+0

@ कनककिस्तान: अब अगर केवल 'xhr' उचित' अधिभार 'और' वनेंट' गुणों को कार्यान्वित किया गया है;) वेब डेवलपर्स का उपयोग 'पहले से ही बदलना' के लिए किया जा सकता है लेकिन मैं इसे एक बदसूरत समाधान मानता हूं। –

+0

@Wladimir Palant। डोम्पर्स समाधान बहुत अच्छा काम किया। हालांकि XMLHttpRequest समाधान ने मुझे एक ही त्रुटि संदेश फेंक दिया।मैंने डोमपर्स के साथ आपको जो कुछ भी सिफारिश की थी, उसके समान कुछ करने के लिए समाप्त हुआ: 'var {सीसी, सीआई} = आवश्यकता (" क्रोम "); var अनुरोध = सीसी ["@ mozilla.org/xmlextras/xmlhttprequest;1"]। CreateInstance (Ci.nsIXMLHttpRequest); 'और यह काम किया! धन्यवाद – kriztean

3

यदि आप XMLHttpRequest (xhr module के माध्यम से उपलब्ध) का उपयोग करते हैं तो आप आसानी से DOMParser के उपयोग से बच सकते हैं।

बजाय:: bellow मैं एक उदाहरण 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); 

या जो भी हो।

+0

क्या आप' xmlDoc.document.body.innerHTML' कर सकते हैं जैसे आप 'DOMParser' के साथ कर सकते हैं? – Noitidart