फ़ायरफ़ॉक्स एक्सटेंशन में मैं HTML की एक स्ट्रिंग को DOM ऑब्जेक्ट में कैसे बदल सकता हूं?

मैं XMLHttpRequest के साथ एक वेब पेज (टैग सूप एचटीएमएल) डाउनलोड कर रहा हूं और मैं आउटपुट लेना चाहता हूं और उसे एक DOM ऑब्जेक्ट में बदलना चाहता हूं जिसे मैं XPATH क्वेरी चला सकता हूं। मैं स्ट्रिंग से DOM ऑब्जेक्ट में कैसे परिवर्तित करूं?

ऐसा प्रतीत होता है कि सामान्य समाधान एक छिपी हुई आईफ्रेम बनाना और स्ट्रिंग की सामग्री को उसमें फेंकना है। अपडेट करने के बात को अपडेट किया गया है DOMParser टेक्स्ट / एचटीएमएल का समर्थन करने के लिए, लेकिन फ़ायरफ़ॉक्स 3.0.1 के रूप में आपको अभी भी एक NS_ERROR_NOT_IMPLEMENTED यदि आप कोशिश करते हैं।

छुपा आईफ्रेम चाल का उपयोग करने के अलावा कोई विकल्प है? और यदि नहीं, तो iframe चाल करने का सबसे अच्छा तरीका क्या है ताकि आपका कोड किसी भी वर्तमान में खुले टैब के संदर्भ के बाहर काम करता है (ताकि बंद टैब कोड को पेंच नहीं कर सकें)?

This is an example of why I'm looking for a solution other than the iframe hack, if I have to write all that code to have a robust solution, then I'd rather keep looking for something else.

0
ro fr bn

5 उत्तर

अजाक्सियन वास्तव में एक एचटीएमएल डालने / पुनः प्राप्त करने पर पोस्ट आज एक आईफ्रेम । आप शायद वहां पोस्ट किए गए जेएस स्निपेट का उपयोग कर सकते हैं।

ब्राउज़र / टैब को बंद करने के लिए, आप onbeforeunload ( http://msdn.microsoft.com/en-us/library/ms536907 (VS.85) .aspx ) घटना और जो कुछ भी आपको करने की ज़रूरत है वह करें।

0
जोड़ा

इसे आज़माएं:

var request = new XMLHttpRequest();

request.overrideMimeType( 'text/xml' );
request.onreadystatechange = process;
request.open ( 'GET', url );
request.send( null );

function process() { 
    if ( request.readyState == 4 && request.status == 200 ) {
        var xml = request.responseXML;
    }
}

ओवरराइड माइम टाइप और responseXML पर ध्यान दें।
readyState == 4 'पूरा' है।

0
जोड़ा
यह काम नहीं करता है अगर प्रतिक्रिया वैध एक्सएमएल के साथ शुरू करने के लिए नहीं है। यदि आप फ़ायरफ़ॉक्स को एक्सएमएल की अपेक्षा करने के लिए कहते हैं तो यह सख्त होगा कि यह किस प्रकार पार्स करेगा।
जोड़ा लेखक thelsdj, स्रोत

एक div बनाने का प्रयास करें

document.createElement( 'div' );

और उसके बाद टैग सूप HTML को div के आंतरिक HTML पर सेट करें। ब्राउज़र को उस xml में संसाधित करना चाहिए, जिसे आप पार्स कर सकते हैं।

आंतरिक HTML संपत्ति एक स्ट्रिंग लेती है   जो एक वैध संयोजन निर्दिष्ट करता है   पाठ और तत्व। जब आंतरिक HTML   संपत्ति सेट है, दी गई स्ट्रिंग   पूरी तरह से मौजूदा जगहों को बदल देता है   वस्तु की सामग्री। अगर स्ट्रिंग   एचटीएमएल टैग है, स्ट्रिंग है   इसे रखा गया है और स्वरूपित किया गया है   दस्तावेज़ में।

0
जोड़ा
इसके साथ समस्या यह है कि मुझे पूरे एचटीएमएल दस्तावेज़ की आवश्यकता है, <head> और यह सब जो इसे फेंक देगा। इसके अलावा मैं मौजूदा विंडोज़ / टैब का उपयोग नहीं करने की कोशिश कर रहा हूं क्योंकि मेरा कोड उनके संदर्भ के बाहर चलाता है और मैं किसी उपयोगकर्ता को यादृच्छिक रूप से विंडो या टैब को बंद करने के लिए प्रतिरोधी बनना चाहता हूं जिससे मेरा कोड बाधित हो जाता है (माना जाता है कि फ़ायरफ़ॉक्स अभी भी चल रहा है)।
जोड़ा लेखक thelsdj, स्रोत

तो आप जावास्क्रिप्ट का उपयोग कर एक एक्सएमएल ऑब्जेक्ट के रूप में एक वेबपृष्ठ डाउनलोड करना चाहते हैं, लेकिन आप वेबपृष्ठ का उपयोग नहीं करना चाहते हैं? चूंकि उपयोगकर्ता पर क्या नियंत्रण नहीं होगा (टैब या विंडो या व्हाट्नॉट बंद करना) आपको ओएसएक्स डैशबोर्ड विजेट या कुछ अलग एप्लिकेशन की तरह ऐसा करने की आवश्यकता होगी। एक फ़ायरफ़ॉक्स एक्सटेंशन भी काम करेगा, जब तक आपको ब्राउजर को बंद करने वाले उपयोगकर्ता के बारे में चिंता न करें।

0
जोड़ा
हां, मैं फ़ायरफ़ॉक्स एक्सटेंशन का उपयोग कर रहा हूं, लेकिन अधिकांश आईफ्रेम उदाहरण ब्राउज़र प्रक्रिया / टैब बंद करने के लिए मूल प्रक्रिया में किसी ऑब्जेक्ट की बजाय मनमाने ढंग से ब्राउज़र विंडो का उपयोग करते हैं।
जोड़ा लेखक thelsdj, स्रोत

छिपी आईफ्रेम चाल का उपयोग करने के अलावा कोई विकल्प है?

दुर्भाग्य से, नहीं, अब नहीं। अन्यथा आपके द्वारा इंगित माइक्रोस्कोरी कोड इसके बजाय इसका उपयोग करेगा।

और यदि नहीं, तो iframe चाल करने का सबसे अच्छा तरीका क्या है ताकि आपका कोड किसी भी वर्तमान में खुले टैब के संदर्भ के बाहर काम करता है (ताकि बंद टैब कोड को पेंच नहीं कर सकें)?

आपके द्वारा उद्धृत कोड हालिया ब्राउज़र विंडो का उपयोग करता है, इसलिए बंद करने वाले टैब पार्सिंग को प्रभावित नहीं करेंगे। बंद करना कि ब्राउज़र विंडो आपके भार को निरस्त कर देगी, लेकिन आप इससे निपट सकते हैं (पता लगाएं कि भार निरस्त हो गया है और उदाहरण के लिए इसे दूसरी विंडो में पुनरारंभ करें) और यह अक्सर नहीं होता है।

Iframe के लिए ठीक से काम करने के लिए आपको एक डोम विंडो की आवश्यकता है, इसलिए इस समय कोई साफ समाधान नहीं है (यदि आप मोज़िला पार्सर का उपयोग करने के इच्छुक हैं)।

0
जोड़ा