Il controllo del browser web di IE9 supporterà tutte le funzionalità di IE9, incluso SVG?


84

Recentemente ho aggiornato a IE9-beta. Ora, nella mia applicazione WinForm .Net (3.5) voglio usare il WebBrowsercontrollo.

Quindi la mia domanda è: se il WebBrowsercontrollo mostrerà tutte le proprietà e le funzioni di IE9?

La mia preoccupazione è che voglio renderizzare alcuni grafici SVG su di esso.

Risposte:


82

La "versione" IE9 del controllo WebBrowser, come la versione IE8, è in realtà composta da più browser in uno. A differenza della versione IE8, hai un po 'più di controllo sulla modalità di rendering all'interno della pagina cambiando il doctype. Ovviamente, per cambiare la modalità del browser devi impostare il tuo registro come la risposta precedente. Ecco un frammento di file reg per FEATURE_BROWSER_EMULATION:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"contoso.exe"=dword:00002328

Ecco il set completo di codici:

  • 9999 (0x270F) - Internet Explorer 9. Le pagine Web vengono visualizzate in modalità standard IE9, indipendentemente dalla direttiva! DOCTYPE.
  • 9000 (0x2328) - Internet Explorer 9. Le pagine Web contenenti direttive! DOCTYPE basate su standard vengono visualizzate in modalità IE9.
  • 8888 (0x22B8) -Le pagine web vengono visualizzate in modalità standard IE8, indipendentemente dalla direttiva! DOCTYPE.
  • 8000 (0x1F40) - Le pagine Web contenenti direttive! DOCTYPE basate su standard vengono visualizzate in modalità IE8.
  • 7000 (0x1B58) - Le pagine web che contengono direttive! DOCTYPE basate su standard vengono visualizzate in modalità IE7 Standards.

I documenti completi:

http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation


8
Con IE 9 installato, non sembra possibile ottenere una pagina per il rendering in modalità IE 8. Impostando il valore su 7000 si passa alla modalità IE 7 e 8000/8888/9000/9999 lo pone in modalità IE 9. Se si tratta di una sorta di bug o se è intenzionale, non lo so però.
Michael Low

2
Ho dovuto aggiungere la chiave sia a current_user che a local_machine prima che iniziasse a funzionare per me. Ma ha avuto successo dopo.
Sarah Bailey

Questo post del blog, weblog.west-wind.com/posts/2012/feb/15/… menziona che la voce del registro varierà a seconda che si tratti di Windows a 32 o 64 bit. 32 bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATIONe 64 bit HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION.
Richard Chambers

129

Il controllo WebBrowser utilizzerà qualsiasi versione di IE installata, ma per motivi di compatibilità renderà le pagine in modalità IE7 Standards per impostazione predefinita.

Se vuoi sfruttare le nuove funzionalità di IE9, dovresti aggiungere il meta tag <meta http-equiv="X-UA-Compatible" content="IE=9" >all'interno del <head>tag della tua pagina HTML.

Questo meta tag deve essere aggiunto prima di qualsiasi link a CSS, file ecc che sono anche nel vostro JavaScript <head>per funzionare correttamente anche se (solo altri <meta>tag o il <title>tag può venire prima).

Un'alternativa è aggiungere una voce di registro a:

HKLM> SOFTWARE> Microsoft> Internet Explorer> Principale> FeatureControl> FEATURE_BROWSER_EMULATION

E lì aggiungi 'myApplicationName.exe' con valore '9000' per forzare il controllo WebBrowser a visualizzare le pagine in modalità IE9. Sebbene ci siano anche altri valori che puoi usare , nota che questi documenti non sono del tutto accurati in quanto non sembra possibile ottenere una pagina da visualizzare in modalità IE 8 qualunque sia il valore che usi.

Funzionerà anche l'aggiunta della chiave di registro allo stesso percorso in HKCU anziché in HKLM: ciò è utile poiché la scrittura su HKLM richiede privilegi di amministratore, mentre HKCU non lo fa.


2
I diversi valori per la parte del contenuto possono essere trovati qui: msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx
KB

Se questa impostazione potesse essere memorizzata in un file CSS sarei più felice. Ora devo esaminare molti documenti o esiste una funzione di ricerca e sostituzione su più righe in Visual Studio?
KB

2
Ho provato il meta tag ma non funzionava. Ho ricevuto un messaggio di errore che indicava "HTML1115: tag META compatibile con X-UA ('IE = 9 ′) ignorato perché la modalità documento è già stata finalizzata.", Che mi ha portato alla pagina web evolpin.wordpress.com/2011/02/ 25 /… . La soluzione era quindi assicurarsi che il meta tag fosse il primo elemento all'interno del blocco <head>.
Steg

21
Fai attenzione, se stai eseguendo applicazioni a 32 bit (che chiamano MSIE a 32 bit) su Windows a 64 bit, la voce di registro dovrebbe essere aggiunta a HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION anziché.
igordc

1
Stavo eseguendo il rendering di HTML tramite xsl / xslt e il regedit non ha funzionato per qualche motivo ... Il meta ha funzionato. Grazie!
MazarD

25

Grazie al cielo ho trovato questo. Quanto segue è estremamente importante:

<meta http-equiv="X-UA-Compatible" content="IE=9" >

Senza questo, nessuno dei rapporti che stavo generando funzionerebbe dopo l'installazione di IE9 nonostante abbia funzionato alla grande in IE8. Verrebbero visualizzati correttamente in un controllo del browser web, ma ci sarebbero lettere mancanti, spazi vuoti sollevati, ecc., Quando ho chiamato .Print (). Erano solo HTML di base che dovrebbero essere riproducibili anche in Mosaic. heh Non sono sicuro del motivo per cui la modalità di compatibilità IE7 stava andando in tilt. In particolare, potresti stampare () la stessa pagina 5 volte e fare in modo che manchino lettere diverse ogni volta. Verrebbe anche trasferito nell'output PDF, quindi è sicuramente il browser.


17

Una nota su Windows a 64 bit che sembra far inciampare alcune persone. Se la tua app viene eseguita su Windows a 64 bit, probabilmente dovrai impostare DWORD in [HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION].


16

Giusto per essere completo ...

Per il sistema operativo a 32 bit è necessario aggiungere una voce di registro a:

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

*******O*******

Per il sistema operativo a 64 bit è necessario aggiungere una voce di registro a:

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

Questa voce deve essere una DWORD, con il nome che è il nome del tuo eseguibile, che ospita il controllo Webbrowser; cioè:

myappname.exe (NON USARE "Contoso.exe" come nella pagina web MSDN ... è solo un nome segnaposto)

Quindi assegnagli un DWORDvalore, secondo la tabella su:

http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation

Ho cambiato in 11001 decimal o 0x2AF9 hex --- (IE 11 EMULATION) poiché non è il valore DEFAULT (se hai IE 11 installato o qualsiasi versione).

L'articolo di MSDN contiene note su diverse altre modifiche al Registro di sistema che influiscono sul comportamento del browser Web di Internet Explorer.


1
La parte DWORD è molto importante. QWORD non funzionerà e si può facilmente commettere questo errore.
pvieira

Vorrei aggiungere che, quando esegui il debug in VS, dovresti aggiungere anche una voce per myappname.vshost.exe. D'altra parte, sospetto che anche il semplice lancio dell'app dal debugger e poi nel debugger farebbe il trucco. Penso che abbia funzionato una volta per me; ma non ne sono sicuro al 100%.
Grande puffo

1
A causa della mia configurazione IE11, dovevo aprire IE11 e aggiungere l'URL di destinazione ai miei siti attendibili. Senza questo, anche se il mio registro è stato configurato correttamente, gli script della pagina non verrebbero eseguiti.
Tony

15

So che questo thread è vecchio e ci sono già risposte esaurienti.

Nel caso in cui non lo sai:

<meta http-equiv="X-UA-Compatible" content="IE=edge" >

Non è necessario codificare il numero di versione di IE come

<meta http-equiv="X-UA-Compatible" content="IE=9" >


Ciò non è correlato al problema: il controllo WebBrowser viene caricato solo in modalità IE7 a meno che non venga sovrascritto con un'impostazione di registro per il programma specifico.
Christian

4
@Christian Sei sicuro? Per quanto ne so, se la pagina web contiene <meta http-equiv="X-UA-Compatible" content="IE=edge" >nell'intestazione, il browser web verrà caricato nell'ultima modalità IE. Perché ci sono più di 90 voti favorevoli alla risposta di Mikel? perché la sua soluzione funziona. La modifica del registro non è necessaria se è possibile modificare la pagina web.
Tyler Long

Sono positivo al 100%, tuttavia penso che dipenda anche dalla posizione del sito web. Ho caricato il contenuto locale e l'unico modo in cui la versione potrebbe spostarsi è attraverso il registro. Credimi, butterei via la soluzione del registro per qualsiasi altra cosa che funzioni, ma nient'altro sembrava funzionare.
Christian

ie = edge ha funzionato per me, senza che io tocchi il registro. Grazie!
Yisroel M. Olewski

@Christian questo è davvero correlato alla domanda: la soluzione funziona bene.
MarzSocks

6

Sono totalmente d'accordo con la soluzione fornita, ma penso che un piccolo chiarimento sia importante, penso, potrebbe essere necessario.

Per ogni processo (leggi anche: vshost.exe, yourWinformApplication.exe.svchost, o il nome della tua applicazione.exe) che dovrà aggiungere un DWORD con il valore fornito, nel mio caso lascio 9000 (in decimale) nell'applicazione nome e script in esecuzione senza problemi e senza errori.

l'errore più comune è credere che sia necessario aggiungere "contoso.exe" COSÌ COM'È e pensare che tutto funzioni!


3

Sì, il controllo WebBrowser utilizza qualsiasi versione di IE installata. Ciò significa ovviamente che se esegui la tua applicazione su una macchina con IE 8, le funzionalità di IE 9 da cui dipendi non saranno disponibili.


2
Rileggi di nuovo la mia risposta. Il voto negativo non era richiesto. Ho detto che se cerca di utilizzare le funzionalità di IE9 e poi si distribuisce su una macchina senza IE9, quelle funzionalità non funzioneranno. L'impostazione del registro di compatibilità con le versioni precedenti non cambierà questo fatto.
Josh

16
La tua prima frase è palesemente falsa. La tua seconda frase, per lo meno, è sia ovvia che pigra. A proposito, grazie per il voto negativo punitivo. Molto maturo.
Whitehawk

3
Il controllo WebBrowser utilizza qualsiasi versione di IE installata; tuttavia lo script di rilevamento potrebbe non rendersene conto. Prova questo [site ( whatismybrowser.com/)[1] . So che altri siti mi hanno fornito informazioni sbagliate, ma questo sito ha identificato correttamente il browser come la versione di IE installata sulla mia macchina. [1]: whatismybrowser.com
cjbarth

3

Sono arrivato a questa soluzione e non ha funzionato per me! Poiché stavo usando 64 bit, ho dovuto sostituire il registro:

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

Invece di quello di cui tutti parlano:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]

1

Mi è piaciuto il codice (C #) di seguito che definisce le impostazioni del registro per la tua app. Non sono sicuro se lo taglierà dopo l'installazione anche se sono necessarie le autorizzazioni. Per me ha risolto un problema con WebSocket non disponibile all'interno di un controllo WebBrowser in WPF.

Chiamata Ajax del browser web C #


1

Ho avuto lo stesso problema e le risposte del registro qui non hanno funzionato.

Avevo un controllo del browser nella nuova versione del mio programma che funzionava bene su XP, fallito in Windows 7 (64 bit). La vecchia versione funzionava sia su XP che su Windows 7.

La pagina web visualizzata nel browser utilizza alcuni strani plugin per mostrare vecchie mappe SVG (penso sia un'applet Java).

Si scopre che il problema è correlato alla protezione DEP in Windows 7.

Le vecchie versioni di dotnet 2 non impostavano il flag richiesto DEP nell'exe, ma da dotnet 2, SP 1 in poi lo ha fatto (sì, il comportamento di compilazione e quindi il comportamento di runtime di exe sono cambiati a seconda della macchina su cui hai compilato, bello. ..).

È documentato in un blog MSDN NXCOMPAT e nel compilatore C # . Per citare: questo senza dubbio sorprenderà alcuni sviluppatori ... scarica un service pack di framework, ricompila, esegui la tua app e ora ricevi le eccezioni IP_ON_HEAP.

Aggiungendo quanto segue alla compilazione post in Visual Studio, disattiva DEP per l'exe e tutto funziona come previsto:

all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"

-3

Per quanto riguarda la risposta accettata da Whitehawk. Sto solo cercando di aggiungere un po 'di esperienza pratica. Stavo solo cercando di aggiungere un commento, ma SO si lamenta che è troppo lungo.

Fondamentalmente, senza IE 9 installato, lo switch del registro FEATURE_BROWSER_EMULATION non funzionerà affatto.

Ad esempio, la mia esperienza oggi stavo cercando di far funzionare il .net webcontrol con la modalità IE10 perché un html che sto cercando di renderizzare non funzionerà con .netControl sotto VS2012 e non funzionerà nemmeno quando carico l'html su IE8 direttamente, il css non verrà comunque visualizzato correttamente (anche dopo aver detto di consentire il contenuto bloccato). Ma ho testato lo stesso html ok con IE10 sulla macchina win 8 di un amico. Ecco perché sto cercando di impostare .net webControl in modalità IE 10 ma continua a fallire ...

Ora ho pensato che questo è bcos la mia macchina win 7 ha installato solo IE8, quindi indipendentemente dal valore impostato sull'interruttore FEATURE_BROWSER_EMULATION (valore su IE9, IE10 IE11), non funzionerà affatto!

Quindi ho scaricato e installato IE 10 sulla mia macchina win 7. Ancora non funzionerà, quindi ho aggiunto FEATURE_BROWSER_EMULATION, ha iniziato a funzionare!

Inoltre ho notato indipendentemente dal valore che ho impostato, anche impostandolo sul valore 0 per impostazione predefinita, il webControl utilizza ancora la modalità IE 10 che funziona ancora per me.

Quindi, per riassumere, se hai IE X installato ma vuoi che il tuo .Net webControl funzioni sotto IE (X + N) N> 0 modo, DUE cose che devi fare:

  1. Vai al sito Web di MS e scarica e installa IE (X + N) sul tuo computer, dovrai riavviare dopo l'installazione.

  2. applica la risposta di Whitehawk.

Fondamentalmente: per controllare il valore di questa funzionalità utilizzando il registro, aggiungere il nome del file eseguibile alla seguente impostazione e impostare il valore in modo che corrisponda all'impostazione desiderata.

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Internet Explorer
            Main
               FeatureControl
                  FEATURE_BROWSER_EMULATION
                     contoso.exe = (DWORD) 00009000

Windows Internet Explorer 8 e versioni successive. La funzionalità FEATURE_BROWSER_EMULATION definisce la modalità di emulazione predefinita per Internet Explorer e supporta i seguenti valori.

Descrizione valore

  • 11001 (0x2AF9 Internet Explorer 11. Le pagine Web vengono visualizzate in modalità edge IE11, indipendentemente dalla direttiva! DOCTYPE.

    11000 (0x2AF8) IE11. Le pagine web che contengono direttive! DOCTYPE basate su standard vengono visualizzate in modalità edge IE11. Valore predefinito per IE11.

    10001 (0x2711) Internet Explorer 10. Le pagine web vengono visualizzate in modalità standard IE10, indipendentemente dalla direttiva! DOCTYPE.

    10000 (0x02710) Internet Explorer 10. Le pagine Web contenenti direttive! DOCTYPE basate su standard vengono visualizzate in modalità IE10 Standards. Valore predefinito per Internet Explorer 10.

    9999 (0x270F) Windows Internet Explorer 9. Le pagine web vengono visualizzate in modalità standard IE9, indipendentemente dalla direttiva! DOCTYPE.

    9000 (0x2328) Internet Explorer 9. Le pagine Web che contengono direttive! DOCTYPE basate su standard vengono visualizzate in modalità IE9. Valore predefinito per Internet Explorer 9.

    Importante In Internet Explorer 10, le pagine Web contenenti direttive! DOCTYPE basate su standard vengono visualizzate in modalità IE10 Standards.

    8888 (0x22B8) Le pagine web vengono visualizzate in modalità standard IE8, indipendentemente dalla direttiva! DOCTYPE.

    8000 (0x1F40) Le pagine Web contenenti direttive! DOCTYPE basate su standard vengono visualizzate in modalità IE8. Valore predefinito per Internet Explorer 8 Importante In Internet Explorer 10, le pagine Web contenenti direttive! DOCTYPE basate su standard vengono visualizzate in modalità IE10 Standards.

    7000 (0x1B58) Le pagine Web contenenti direttive! DOCTYPE basate su standard vengono visualizzate in modalità IE7 Standards. Valore predefinito per le applicazioni che ospitano il controllo WebBrowser.

Rif. Completo qui


without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.- questo è sbagliato. Ho installato solo IE8 e posso usare perfettamente l'interruttore per mettere il browser web in diverse modalità di rendering.
GSerg

Ho provato a installare IE8 cercando di ottenere la modalità IE10, non funzionerà affatto! Ho appena provato di nuovo, non ha funzionato
Gob00st
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.