Czy formant przeglądarki internetowej IE9 będzie obsługiwał wszystkie funkcje przeglądarki IE9, w tym SVG?

84

Niedawno zaktualizowałem do IE9-beta. Teraz w mojej aplikacji .Net (3.5) WinForm chcę używać WebBrowserformantu.

Moje pytanie brzmi więc, czy WebBrowserformant będzie wykazywał wszystkie właściwości i funkcje IE9?

Martwię się, że chcę wyrenderować na nim trochę grafiki SVG.

Omkar
źródło

Odpowiedzi:

82

„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

Whitehawk
źródło
8
Po zainstalowaniu przeglądarki IE 9 nie wydaje się możliwe renderowanie strony w trybie IE 8. Ustawienie wartości na 7000 przełącza w tryb IE 7, a 8000/8888/9000/9999 w tryb IE 9. Nie wiem, czy jest to jakiś błąd, czy też celowy.
mikel,
2
Musiałem dodać klucz zarówno do current_user, jak i local_machine, zanim zacznie działać dla mnie. Ale potem się udało.
Sarah Bailey
W tym poście na blogu weblog.west-wind.com/posts/2012/feb/15/… wspomniano, że wpis rejestru będzie się różnić w zależności od tego, czy 32-bitowy, czy 64-bitowy system Windows. 32-bitowy HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATIONi 64-bitowy HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION.
Richard Chambers,
129

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:

HKLM> OPROGRAMOWANIE> Microsoft> Internet Explorer> Główne> FeatureControl> FEATURE_BROWSER_EMULATION

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.

mikel
źródło
2
Różne wartości dla części zawartości można znaleźć tutaj: msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx
KB,
Gdyby to ustawienie można było zapisać w pliku CSS, byłbym szczęśliwszy. Teraz muszę przejrzeć wiele dokumentów lub czy w programie Visual Studio jest dostępna funkcja wyszukiwania i zastępowania wielowierszowego?
KB
2
Wypróbowałem metatag, ale nie zadziałał. Otrzymałem komunikat o błędzie informujący, że „HTML1115: tag META zgodny z X-UA ('IE = 9') został zignorowany, ponieważ tryb dokumentu jest już zakończony.”, Co prowadzi mnie do strony internetowej evolpin.wordpress.com/2011/02/ 25 /… . Rozwiązaniem było wtedy zapewnienie, że metatag był pierwszym elementem wewnątrz bloku <head>.
Steg
21
Uważaj, jeśli używasz 32-bitowych aplikacji (które wywołują 32-bitowe MSIE) w 64-bitowym systemie Windows, wpis rejestru powinien zostać dodany do HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION zamiast.
igordc,
1
Renderowałem html przez xsl / xslt i regedit z jakiegoś powodu nie działał ... Meta załatwiła sprawę. Dzięki!
MazarD
25

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.

Geoff
źródło
17

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].

jtk
źródło
16

Żeby być kompletnym ...

W przypadku 32-bitowego systemu operacyjnego należy dodać wpis rejestru do:

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

*******LUB*******

W przypadku 64-bitowego systemu operacyjnego należy dodać wpis rejestru do:

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

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 DWORDwartość, 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.

user3175394
źródło
1
Część DWORD jest bardzo ważna. QWORD nie zadziała i łatwo można popełnić ten błąd.
pvieira
Dodałbym, że podczas debugowania pod VS należy dodać również wpis dla myappname.vshost.exe. Z drugiej strony podejrzewam, że po prostu uruchomienie aplikacji z debugera, a następnie w debugerze również załatwi sprawę. Myślę, że kiedyś to zadziałało; ale nie jestem w 100% pewien.
Papa Smurf
1
Ze względu na konfigurację IE11 musiałem otworzyć IE11 i dodać docelowy adres URL do moich zaufanych witryn. Bez tego skrypty strony nie działałyby, mimo że mój rejestr byłby prawidłowo skonfigurowany.
Tony
15

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" >

Tyler Long
źródło
Nie ma to związku z problemem - formant WebBrowser ładuje się tylko w trybie IE7, chyba że zostanie zastąpiony ustawieniem rejestru dla konkretnego programu.
Christian
4
@Christian Czy na pewno? O ile wiem, jeśli strona internetowa zawiera <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ą.
Tyler Long
Jestem w 100% pewien, ale myślę, że zależy to również od lokalizacji strony. Ładuję zawartość lokalną i jedyny sposób, w jaki wersja mogłaby się ruszyć, to przez rejestr. Zaufaj mi, wyrzuciłbym rozwiązanie rejestru na wszystko, co działa, ale nic innego nie wydawało się działać.
Christian
ie = edge działało dla mnie, bez dotykania rejestru. dzięki!
Yisroel M. Olewski
@Christian jest to rzeczywiście związane z pytaniem - rozwiązanie działa dobrze.
MarzSocks
6

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!

Alfred Severo
źródło
3

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.

Josh
źródło
2
Przeczytaj ponownie moją odpowiedź. Głos przeciw nie był uzasadniony. Powiedziałem, że jeśli spróbuje użyć funkcji IE9, a następnie wdroży na komputer bez IE9, te funkcje nie będą działać. Ustawienie rejestru zgodności z poprzednimi wersjami nie zmieni tego faktu.
Josh
16
Twoje pierwsze zdanie jest ewidentnie fałszywe. Twoje drugie zdanie jest przynajmniej oczywiste i leniwe. Swoją drogą dzięki za odwetowe głosy przeciw. Bardzo dojrzały.
whitehawk
3
Formant WebBrowser używa dowolnej zainstalowanej wersji IE; jednakże skrypt wykrywający może nie zdawać sobie z tego sprawy. Wypróbuj tę [witrynę ( whatismybrowser.com/)][1] . Wiem, że inne witryny podały mi błędne informacje, ale ta witryna poprawnie zidentyfikowała przeglądarkę jako wersję IE zainstalowaną na moim komputerze. [1]: whatismybrowser.com
cjbarth
3

Doszedłem do tego rozwiązania i nie zadziałało! Ponieważ korzystałem z 64-bitowego, musiałem wymienić rejestr:

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

Zamiast tego, o którym wszyscy mówią:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
Tono Nam
źródło
1

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

Dirk Bester
źródło
1

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)"
Dave Glassborow
źródło
-3

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 :

  1. Przejdź do witryny MS i pobierz i zainstaluj IE (X + N) na swoim komputerze, po instalacji będziesz musiał ponownie uruchomić komputer.

  2. 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

Gob00st
ź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.
GSerg
Próbowałem zainstalować IE8, próbując uzyskać tryb IE10, w ogóle nie działa! Po prostu spróbowałem ponownie, nie zadziałało
Gob00st