2012-09-25 28 views
27

मैं एक वेब ब्रोसर नियंत्रण का उपयोग कर रहा हूं और मैं नियंत्रण में प्रदर्शित होने से पहले HTML कोड में हेरफेर करना चाहता हूं।उपयोगकर्ता को प्रदर्शित होने से पहले वेबब्राउज़र में HTML को बदलना?

निम्नलिखित सामग्री के साथ उदाहरण खुला वेबसाइट A के लिए:

<html> 
    <body> 
    <p id="Text">Hello</p> 
    </body> 
</html> 

मैं

<html> 
    <body> 
    <p id="Text">Bye</p> 
    </body> 
</html> 

करने के लिए इसे बदलना चाहते हैं मैं जानता हूँ कि मैं कर सकता है कि DocumentCompleted घटना के साथ और फिर इसे हेरफेर। लेकिन यदि वेबसाइट जावास्क्रिप्ट सामान निष्पादित करती है जो दस्तावेज़ तैयार घटना पर निष्पादित हो जाती है, तो इसे बदलने में कोई अर्थ नहीं होगा, क्योंकि इसे पहले ही निष्पादित कर दिया गया है।

+0

आप डाउनलोड किए जाने से पहले डाउनलोड किए गए HTML को बदलना चाहते हैं और फिर केवल परिवर्तित कोड प्रदर्शित करना चाहते हैं, है ना? –

+0

हाँ आप सही हैं, यह वही है जो मैं करना चाहता हूं .. – RaphaelH

उत्तर

14

आप Navigated घटना अंदर डोम हेरफेर कर सकता है:

webBrowser1.Navigated += (sender, e) => 
{ 
    ((WebBrowser)sender).Document.GetElementById("Text").InnerHtml = "Bye"; 
}; 

इस दस्तावेज़ में किसी भी डोम तैयार संचालकों से पहले निष्पादित करेंगे। उदाहरण के लिए यदि आप शुरू में निम्न HTML था:

<html> 
<head> 
    <title>Test</title> 
</head> 
<body onload="document.getElementById('Text').innerHTML = document.getElementById('Text').innerHTML + ' modified';"> 
    <p id="Text">Hello</p> 
</body> 
</html> 

जब आप WebBrowser में इस कोड को आप Bye modified मिल जाएगा प्रदर्शित करते हैं।

+2

मुझे यह विचार पसंद है .. लेकिन समस्या यह है कि यदि HTML दस्तावेज़ थोड़ा बड़ा है, तो WebBrowser Controls सब कुछ एक साथ नहीं पढ़ता है, इसलिए नेविगेटेड इवेंट कहा जाता है, लेकिन यह अभी भी पेज लोड कर रहा है .. – RaphaelH

0

यह काम नहीं करता है। मैं भी ऐसी ही समस्या का सामना कर रहा हूँ। अगर आप AJAX कॉल को संशोधित करना चाहते हैं तो क्या होगा? नेविगेट विधि कभी आग नहीं होती है। नेविगेट विधि भी IFrames पर कभी नहीं आग लगती है।

मुझे लगता है कि एकमात्र समाधान प्रॉक्सी का उपयोग करना है। बस NuGet संकुल जोड़ें पर क्लिक करें। Fiddlercore के लिए खोजें। एक बार जब आप http://www.telerik.com/fiddler/fiddlercore का संदर्भ जोड़ लेंगे। फिडलरकोर का उपयोग करके प्रतिक्रिया को संशोधित करने के तरीके पर बस एक Google खोज करें। मुझे यकीन है कि बहुत सारे उदाहरण होंगे।

नोट: डिफ़ॉल्ट रूप से फिडलर कोर प्रारंभ करते समय यह आपके कंप्यूटर प्रॉक्सी सेटिंग्स को बदल देगा। आपको उसकी चाहत नहीं है! आप केवल अपने वेबब्रोसर नियंत्रण को अपने पूरे सिस्टम से कनेक्ट करने के लिए चाहते हैं। तो सिस्टम प्रॉक्सी के रूप में शुरू किए बिना एक यादृच्छिक बंदरगाह को सुनने के लिए फिडरल कोर प्रारंभ करें। फिर उस प्रॉक्सी से कनेक्ट करने के लिए अपने वेबब्रोसर नियंत्रण को सेट करें।

यह जब HTTPS का उपयोग करने की कोशिश कर रहा जटिल काम मिल जाएगा साइटें:/

0

आप इस तरह के डोम तैयार पर के रूप में (20ms ~) एक उचित अंतराल के साथ एक setInterval कॉलबैक में ऐसा कर सकता है और उसके बाद अंतराल स्पष्ट उपयुक्त समय पर ।

एकमात्र चेतावनी यह है कि आपकी कॉलबैक को बेवकूफ होने की आवश्यकता होगी क्योंकि इसे कई बार बुलाया जाएगा। मुझे संदेह नहीं है कि यदि आप केवल पहले ही संशोधित किए गए डीओएम नोड्स में डेटा एट्रिब्यूट या क्लासनाम जोड़ते हैं तो उन्हें मुश्किल होना चाहिए ताकि वे फिर से संशोधित न हों।