2012-09-25 20 views
27

WebBrowser Denetimi kullanıyorum ve Kontrolde görüntülenmeden önce HTML Kodunu değiştirmek istiyorum.Kullanıcıya gösterilmeden önce HTML'yi bir WebBrowser'da değiştirme?

aşağıdaki içeriğe sahip örnek açık Sitesi A için: Ben

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

bunu değiştirmek istiyorum

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

ben DocumentCompleted olayla ve sonra işlemek bunu biliyorum. Ancak, Web Sitesi, Doküman hazır olayında çalıştırılan JavaScript öğelerini yürütürse, daha önce yürütüldüğü için bunu değiştirmek mantıklı olmaz.

+0

İndirilmiş HTML'yi görüntülenmeden önce değiştirmek ve sonra sadece değiştirilen kodu görüntülemek istiyor musunuz? –

+0

Yea haklısın, tam olarak ne yapmak isterim .. – RaphaelH

cevap

14

Sen Navigated olayı içinde DOM işlemleri yapabilirsiniz:

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

Bu belgede herhangi DOM hazır işleyicileri önce çalıştırır. Yani, örneğin başlangıçta aşağıdaki HTML olsaydı:

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

Eğer Bye modified alacak WebBrowser içinde bu kodu görüntülediğimizde.

+2

Bu fikri sevdim .. Ama Sorun şu ki, HTML Belgesi biraz daha büyükse, WebBrowser Denetimleri her şeyi aynı anda okumaz. Gezinilen Etkinlik çağrıldı, ancak hala Sayfa yükleniyor. – RaphaelH

0

Bu işe yaramıyor. Ben de aynı problemle karşı karşıyayım. Ajax çağrılarını değiştirmek isterseniz ne yapmalısınız? Gezinme yöntemi asla ateş etmez. Ayrıca navigasyon yöntemi iFrames'e asla ateş etmiyor.

Tek çözümün bir proxy kullanması olduğunu düşünüyorum. Sadece NuGet paketleri eklemek için tıklayın. Fiddlercore için ara. http://www.telerik.com/fiddler/fiddlercore'a bir başvuru ekledikten sonra. Şimdi sadece FiddlerCore kullanarak bir cevabı nasıl değiştireceğinizle ilgili bir google araması yapın. Eminim çok fazla örnek olacak.

Not: Varsayılan olarak çekirdek çekirdekini başlattığınızda, bilgisayar proxy ayarlarınızı değiştirecektir. Bunu istemezsin! webbrowser kontrolünüzün tüm sisteminize bağlanmasını istemezsiniz. Bu nedenle, sistem proxy'si olarak başlatılmadan rastgele bir bağlantı noktasında dinlemek için fidderl çekirdeğini başlat. Ardından, web sunucusu denetleyicinizi bu proxy'ye bağlanmak için ayarlayın. HTTPS erişmeye çalışırken

Bu yanıltıcıdır alacak siteler: Böyle DOM hazır olduğu gibi, uygun bir zamanda (~ 20 ms'te) makul bir aralığı ile bir setInterval geri aramasında bunu ve sonra aralığını açarım/

0

.

Tek uyarı, geri çağırmanızın birden çok kez çağrılacağından, idempotent olması gerektiğidir. Bir modifiye edip henüz değiştirmediğiniz DOM düğümlerine veri özniteliği veya sınıf adı eklemeniz zor olmasından şüphelenmem.

İlgili konular