Come distriggersre la visualizzazione Compatibilità su IE WebBrowserControl in un’app WinForms?

Nella mia app WinForms, se utilizzo un controllo WebBrowser, sembra essere forzato in modalità compatibilità. Come posso disabilitarlo e farlo funzionare allo stesso modo di IE standalone sulla mia macchina durante la navigazione nello stesso sito?

  • Non voglio apportare modifiche al registro. Voglio che tutto sia contenuto nella mia app.
  • Il sito web che sto caricando non è mio, quindi non ho la possibilità di apportare modifiche (a meno che non possano essere eseguiti a livello di programmazione dalla mia app).

Non c’è modo di farlo se non configurare le seguenti impostazioni del registro:

 HKLM \ Software \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION

o se è un’app a 32 bit su Windows a 64 bit:

 HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION`

Queste impostazioni non vengono visualizzate nel controllo WebBrowser .

Per ulteriori informazioni, vedere:

Quale modalità di compatibilità IE utilizza il controllo webbrowser?

Nel caso in cui il link muoia:

Si crea un valore DWORD corrispondente al nome del file eseguibile e si imposta questo valore su uno di:

7000: le pagine contenenti le direttive basate su standard vengono visualizzate in modalità IE7.
8000: le pagine contenenti le direttive basate su standard vengono visualizzate in modalità IE8
8888: le pagine vengono sempre visualizzate in modalità IE8, indipendentemente dalla direttiva . (Questo ignora le eccezioni elencate in precedenza.)
9000: usa le impostazioni di IE9!
9999: forza IE9

Per esempio:

inserisci la descrizione dell'immagine qui

Dai miei esperimenti con IE9:

  • 9000: eredita la modalità di compatibilità impostata nell’impostazione della modalità di compatibilità globale di IE9. vale a dire: inserisci la descrizione dell'immagine qui

  • 9999: forza IE9 fuori dalla modalità di compatibilità nell’applicazione host indipendentemente dall’impostazione della modalità di compatibilità configurata a livello globale

Probabilmente la tua applicazione dovrebbe rilevare quale versione di IE sottostante è disponibile per determinare quale valore utilizzare:

 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Versione

o se è un’app a 32 bit su Windows a 64 bit:

 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Versione

C’è anche questo vecchio articolo da quando è uscito IE8 che vale la pena dare un’occhiata:

Ulteriori miglioramenti all’estensibilità IE8

È anche ansible configurare queste impostazioni in base all’utente per:

 HKCU \ Software \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION

Sebbene non sia quello che hai chiesto, se possiedi il sito puoi aggiungere quanto segue nella sezione head dell’Html .:

Vedi: http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx

Ecco il magro del problema: se un utente triggers la Visualizzazione Compatibilità in IE8, sostituirà tutte le direttive della pagina. Pertanto, qualsiasi pagina o variabile di server che si tenta di utilizzare non riuscirà a impedire a IE di passare a Visualizzazione Compatibilità se l’utente ha triggersto questa funzionalità in IE. La maggior parte delle persone pensa che le direttive delle pagine o qualche tipo di variabile del server di intestazione segreta risolverà il sito. No. Nessuna di queste soluzioni funziona se l’impostazione è stata sovrascritta manualmente. Lo so, non è bello. Quindi il seguente funzionerà solo se l’utente non ha abilitato la funzionalità di visualizzazione della compatibilità.

  

Per chiarire i passaggi per modificare questo nel registro modificare la chiave:

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION 

Quindi aggiungere un nuovo DWORD chiamato iexplore.exe . Per fare ciò, fare clic con il tasto destro del mouse e selezionare Nuovo> DWORD. Dare a DWORD il valore decimale di 9999 . Ciò renderà tutti i siti renderizzati senza visualizzazione di compatibilità. Per abilitare nuovamente la Visualizzazione Compatibilità, eliminare questo DWORD. Inoltre, se desideri automatizzare questa modifica ed eseguire uno script batch sul tuo sistema, controlla lo script di Michal M.

https://gist.github.com/michal-m/1853315

So che questa è una vecchia domanda, ma c’è un modo per inserire un’intestazione nel controllo webbrowser in Visual Basic 2010 e versioni successive per disabilitare la visualizzazione della compatibilità:

La prima cosa che devi fare è catturare la pagina web corrente e quindi sostituire il tag head come segue:

 Sub compatible() ' --- simple routine to disable compatible view. Dim the_url As String Dim message As String Dim theReplacement As String Dim oldMessage As String the_url = WebBrowser1.Url.OriginalString WebBrowser1.Navigate(the_url) message = "" + Chr(13) + Chr(10) + "" + Chr(13) + Chr(10) + "" oldMessage = WebBrowser1.DocumentText.ToString() theReplacement = Replace(oldMessage, "", message) WebBrowser1.DocumentText = theReplacement End Sub 

Questo codice aggiunge le due seguenti righe nel controllo webbrowser: