„Wersja” IE9 formantu WebBrowser, podobnie jak wersja IE8, to w rzeczywistości kilka przeglądarek w jednej. W przeciwieństwie do wersji IE8, masz nieco większą kontrolę nad trybem renderowania wewnątrz strony, zmieniając doctype. Oczywiście, aby zmienić tryb przeglądarki, musisz ustawić rejestr, tak jak poprzednia odpowiedź. Oto fragment pliku reg dla 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
Oto pełny zestaw kodów:
- 9999 (0x270F) - Internet Explorer 9. Strony internetowe są wyświetlane w trybie standardów IE9, niezależnie od dyrektywy! DOCTYPE.
- 9000 (0x2328) - Internet Explorer 9. Strony internetowe zawierające oparte na standardach dyrektywy! DOCTYPE są wyświetlane w trybie IE9.
- 8888 (0x22B8) - Strony internetowe są wyświetlane w trybie standardów IE8, niezależnie od dyrektywy! DOCTYPE.
- 8000 (0x1F40) - Strony internetowe zawierające dyrektywy DOCTYPE oparte na standardach są wyświetlane w trybie IE8.
- 7000 (0x1B58) - Strony internetowe zawierające oparte na standardach dyrektywy! DOCTYPE są wyświetlane w trybie standardów IE7.
Pełna dokumentacja:
http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
i 64-bitowyHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
.Formant WebBrowser będzie używał dowolnej wersji przeglądarki IE, którą zainstalowałeś, ale ze względu na zgodność będzie domyślnie renderować strony w trybie standardów IE7.
Jeśli chcesz skorzystać z nowych funkcji IE9, powinieneś dodać metatag
<meta http-equiv="X-UA-Compatible" content="IE=9" >
wewnątrz<head>
tagu swojej strony HTML.Ten metatag musi zostać dodany przed jakimikolwiek linkami do CSS, plików JavaScript itp., Które również są w twoim,
<head>
aby działały poprawnie (tylko inne<meta>
tagi lub<title>
tag mogą znajdować się przed nim).Alternatywą jest dodanie wpisu rejestru do:
Następnie dodaj „myApplicationName.exe” o wartości „9000”, aby wymusić na kontrolce WebBrowser wyświetlanie stron w trybie IE9. Chociaż istnieją również inne wartości, których możesz użyć , pamiętaj, że te dokumenty nie są całkowicie dokładne, ponieważ wydaje się, że nie jest możliwe renderowanie strony w trybie IE 8, niezależnie od używanej wartości.
Dodanie klucza rejestru do tej samej ścieżki w HKCU zamiast HKLM również zadziała - jest to przydatne, ponieważ zapis do HKLM wymaga uprawnień administratora, podczas gdy HKCU nie.
źródło
Dzięki Bogu znalazłem to. Niezwykle ważne są:
<meta http-equiv="X-UA-Compatible" content="IE=9" >
Bez tego żaden z raportów, które generowałem, nie działałby po instalacji IE9, mimo że świetnie działał w IE8. Pojawiłyby się poprawnie w formancie przeglądarki internetowej, ale byłoby brakujące litery, białe spacje itp., Gdy wywołałem .Print (). To był tylko podstawowy HTML, który powinien dać się renderować nawet w Mosaic. heh Nie jestem pewien, dlaczego tryb zgodności z IE7 się psuje. Warto zauważyć, że możesz .Print () tę samą stronę 5 razy i za każdym razem brakować różnych liter. Przeniósłby się nawet do formatu PDF, więc zdecydowanie jest to przeglądarka.
źródło
Uwaga na temat 64-bitowego systemu Windows, która wydaje się wprawiać w zakłopotanie kilku osób. Jeśli Twoja aplikacja działa w 64-bitowym systemie Windows, prawdopodobnie będziesz musiał ustawić DWORD w [HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION].
źródło
Żeby być kompletnym ...
W przypadku 32-bitowego systemu operacyjnego należy dodać wpis rejestru do:
*******LUB*******
W przypadku 64-bitowego systemu operacyjnego należy dodać wpis rejestru do:
Wpis ten musi mieć postać
DWORD
, przy czym nazwa jest nazwą pliku wykonywalnego, w którym znajduje się formant przeglądarki internetowej; to znaczy:myappname.exe (NIE UŻYWAJ „Contoso.exe” jak na stronie internetowej MSDN ... to tylko nazwa zastępcza)
Następnie nadaj mu
DWORD
wartość, zgodnie z tabelą:http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation
Zmieniłem na dziesiętne 11001 lub szesnastkowe 0x2AF9 --- (EMULACJA IE 11), ponieważ nie jest to wartość DOMYŚLNA (jeśli masz zainstalowany IE 11 - lub jakąkolwiek wersję).
Ten artykuł MSDN zawiera uwagi dotyczące kilku innych zmian w rejestrze, które mają wpływ na zachowanie przeglądarki internetowej programu Internet Explorer.
źródło
Wiem, że ten wątek jest stary i są już wyczerpujące odpowiedzi.
Na wypadek, gdybyś tego nie wiedział:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
Nie musisz na stałe kodować numeru wersji IE jako
<meta http-equiv="X-UA-Compatible" content="IE=9" >
źródło
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
nagłówek, przeglądarka webBrowser załaduje się w najnowszym trybie IE. Dlaczego ponad 90 głosów za odpowiedzią mikela? ponieważ jego rozwiązanie działa. Zmiana rejestru nie jest potrzebna, jeśli możesz zmienić stronę internetową.Całkowicie zgadzam się z przedstawionym rozwiązaniem, ale myślę, że małe wyjaśnienie jest ważne i może być konieczne.
Dla każdego procesu (czytaj również: vshost.exe, yourWinformApplication.exe.svchost lub nazwa twojej aplikacji.exe), który będzie musiał dodać DWORD z podaną wartością, w moim przypadku zostawiam 9000 (dziesiętnie) w aplikacji nazwa i działający płynnie i bezbłędnie skrypt.
najczęstszym błędem jest przekonanie, że konieczne jest dodanie „contoso.exe” JAKO JEST i myślenie, że wszystko działa!
źródło
Tak, formant WebBrowser używa dowolnej zainstalowanej wersji IE. Oznacza to oczywiście, że jeśli uruchomisz aplikację na komputerze z IE 8, funkcje IE 9, na których polegasz, nie będą dostępne.
źródło
Doszedłem do tego rozwiązania i nie zadziałało! Ponieważ korzystałem z 64-bitowego, musiałem wymienić rejestr:
Zamiast tego, o którym wszyscy mówią:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
źródło
Podobał mi się kod (C #) poniżej, który ustawia ustawienia rejestru dla Twojej aplikacji. Nie jestem pewien, czy przerwie go po instalacji, jeśli wymagane są uprawnienia. Dla mnie rozwiązało to problem z niedostępnością protokołu WebSocket w kontrolce WebBrowser w WPF.
C # webbrowser wywołanie Ajax
źródło
Miałem ten sam problem, a odpowiedzi rejestru tutaj nie działały.
Miałem kontrolę przeglądarki w nowej wersji mojego programu, która działała dobrze na XP, nie powiodła się w Windows 7 (64 bit). Stara wersja działała zarówno na XP, jak i Windows 7.
Strona wyświetlana w przeglądarce używa dziwnej wtyczki do wyświetlania starych map SVG (myślę, że jest to aplet Java).
Okazuje się, że problem jest związany z ochroną DEP w systemie Windows 7.
Stare wersje dotnet 2 nie ustawiały flagi DEP wymagane w exe, ale od dotnet 2, SP 1 i później tak (tak, zachowanie kompilacji, a tym samym zachowanie środowiska uruchomieniowego exe zmieniło się w zależności od komputera, na którym skompilowano, ładne. ..).
Jest to udokumentowane na blogu MSDN NXCOMPAT i kompilatorze C # . Cytując: To niewątpliwie zaskoczy kilku programistów ... pobierz pakiet serwisowy framework, skompiluj ponownie, uruchom aplikację, a teraz otrzymujesz wyjątki IP_ON_HEAP.
Dodanie następujących elementów do kompilacji post w programie Visual Studio, wyłącza funkcję DEP dla pliku exe i wszystko działa zgodnie z oczekiwaniami:
all "$(DevEnvDir)..\tools\vsvars32.bat" editbin.exe /NXCOMPAT:NO "$(TargetPath)"
/headers
wyświetli ustawienie DEP w pliku exe.źródło
Odnośnie odpowiedzi zaakceptowanej przez Whitehawka. Po prostu staram się dodać trochę doświadczenia. Próbowałem tylko dodać komentarz, ale SO narzeka, że jest za długi.
Zasadniczo bez zainstalowanego IE 9 przełącznik rejestru FEATURE_BROWSER_EMULATION W OGÓLE nie będzie działać.
Na przykład z własnego doświadczenia dzisiaj próbowałem zmusić kontroler sieciowy .net do pracy w trybie IE10, ponieważ jeden kod HTML, który próbuję wyrenderować, nie działa z .netControl pod VS2012 i nawet nie działa, gdy ładuję HTML do IE8 bezpośrednio, nadal css nie będzie renderować się poprawnie (nawet po tym, jak zezwalam na zablokowaną zawartość). Ale przetestowałem ten sam html ok z IE10 na komputerze znajomego win 8. Dlatego próbuję ustawić .net webControl na tryb IE 10, ale po prostu nie udaje mi się ...
Teraz pomyślałem, że to bcos, na mojej maszynie z winem 7 zainstalowano tylko IE8, więc niezależnie od tego, jaką wartość ustawię na przełącznik FEATURE_BROWSER_EMULATION (wartość na IE9, IE10 IE11), po prostu nie będzie działać!
Następnie pobrałem i zainstalowałem IE 10 na moim komputerze z winem 7. Nadal nie zadziała, a potem dodałem FEATURE_BROWSER_EMULATION, zaczęło działać!
Zauważyłem również, że niezależnie od tego, jaką wartość ustawiłem, nawet domyślnie ustawiłem ją na wartość 0, webControl nadal używa trybu IE 10, który nadal działa dla mnie.
Podsumowując, jeśli masz zainstalowany IE X, ale chcesz, aby kontroler .Net webControl działał pod IE (X + N) N> 0 modo, musisz zrobić DWIE rzeczy :
Przejdź do witryny MS i pobierz i zainstaluj IE (X + N) na swoim komputerze, po instalacji będziesz musiał ponownie uruchomić komputer.
zastosuj odpowiedź Whitehawka.
Zasadniczo: Aby kontrolować wartość tej funkcji za pomocą rejestru, dodaj nazwę pliku wykonywalnego do następującego ustawienia i ustaw wartość tak, aby odpowiadała żądanemu ustawieniu.
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER) SOFTWARE Microsoft Internet Explorer Main FeatureControl FEATURE_BROWSER_EMULATION contoso.exe = (DWORD) 00009000
Windows Internet Explorer 8 i nowszy. Funkcja FEATURE_BROWSER_EMULATION definiuje domyślny tryb emulacji przeglądarki Internet Explorer i obsługuje następujące wartości.
Opis wartości
11001 (0x2AF9 Internet Explorer 11. Strony internetowe są wyświetlane w trybie brzegowym IE11, niezależnie od dyrektywy! DOCTYPE.
11000 (0x2AF8) IE11. Strony internetowe zawierające oparte na standardach dyrektywy! DOCTYPE są wyświetlane w trybie brzegowym IE11. Wartość domyślna dla IE11.
10001 (0x2711) Internet Explorer 10. Strony internetowe są wyświetlane w trybie standardów IE10, niezależnie od dyrektywy! DOCTYPE.
10000 (0x02710) Internet Explorer 10. Strony internetowe zawierające dyrektywy! DOCTYPE oparte na standardach są wyświetlane w trybie standardów IE10. Wartość domyślna dla przeglądarki Internet Explorer 10.
9999 (0x270F) Windows Internet Explorer 9. Strony internetowe są wyświetlane w trybie standardów IE9, niezależnie od dyrektywy! DOCTYPE.
9000 (0x2328) Internet Explorer 9. Strony internetowe zawierające oparte na standardach dyrektywy! DOCTYPE są wyświetlane w trybie IE9. Wartość domyślna dla przeglądarki Internet Explorer 9.
Ważne W programie Internet Explorer 10 strony internetowe zawierające dyrektywy DOCTYPE oparte na standardach są wyświetlane w trybie standardów IE10.
8888 (0x22B8) Strony internetowe są wyświetlane w trybie standardów IE8, niezależnie od dyrektywy! DOCTYPE.
8000 (0x1F40) Strony internetowe zawierające dyrektywy DOCTYPE oparte na standardach są wyświetlane w trybie IE8. Wartość domyślna dla przeglądarki Internet Explorer 8 Ważne W przeglądarce Internet Explorer 10 strony internetowe zawierające dyrektywy! DOCTYPE oparte na standardach są wyświetlane w trybie standardów IE10.
7000 (0x1B58) Strony internetowe zawierające oparte na standardach dyrektywy! DOCTYPE są wyświetlane w trybie standardów IE7. Wartość domyślna dla aplikacji obsługujących formant WebBrowser.
Pełne odniesienie tutaj
źródło
without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.
- To jest źle. Mam zainstalowany tylko IE8 i mogę doskonale użyć przełącznika, aby ustawić przeglądarkę internetową w różnych trybach renderowania.