IE9 Web Tarayıcı Kontrolü, SVG dahil IE9'un tüm özelliklerini destekleyecek mi?


84

Yakın zamanda IE9-beta sürümüne geçtim. Şimdi .Net (3.5) WinForm uygulamamda WebBrowserkontrolü kullanmak istiyorum .

Öyleyse sorum şu, WebBrowserkontrolün IE9'un tüm özelliklerini ve işlevlerini sergileyip sergilemeyeceği?

Endişem, üzerinde bazı SVG grafikleri oluşturmak istiyorum.

Yanıtlar:


82

WebBrowser kontrolünün IE9 "versiyonu", IE8 versiyonu gibi, aslında bir arada birkaç tarayıcıdır. IE8 sürümünün aksine, belge türünü değiştirerek sayfa içindeki oluşturma modu üzerinde biraz daha fazla kontrole sahip olursunuz. Tabii ki, tarayıcı modunu değiştirmek için kayıt defterinizi önceki cevap gibi ayarlamanız gerekir. FEATURE_BROWSER_EMULATION için bir reg dosyası parçası:

Windows Registry Editor Version 5.00

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

İşte kodların tamamı:

  • 9999 (0x270F) - Internet Explorer 9. Web sayfaları,! DOCTYPE yönergesine bakılmaksızın IE9 Standartları modunda görüntülenir.
  • 9000 (0x2328) - Internet Explorer 9. Standartlara dayalı! DOCTYPE yönergeleri içeren web sayfaları IE9 modunda görüntülenir.
  • 8888 (0x22B8) -Web sayfaları! DOCTYPE yönergesine bakılmaksızın IE8 Standartları modunda görüntülenir.
  • 8000 (0x1F40) - Standartlara dayalı! DOCTYPE yönergeleri içeren web sayfaları IE8 modunda görüntülenir.
  • 7000 (0x1B58) - Standartlara dayalı! DOCTYPE yönergeleri içeren web sayfaları, IE7 Standartları modunda görüntülenir.

Tam dokümanlar:

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


8
IE 9 kurulduğunda, IE 8 modunda işlenecek bir sayfa elde etmek mümkün görünmüyor. Değeri 7000 olarak ayarlamak IE 7 moduna ve 8000/8888/9000/9999 IE 9 moduna geçirir. Bunun bir tür hata mı yoksa kasıtlı mı olduğunu bilmiyorum.
Michael Low

2
Benim için çalışmaya başlamadan önce anahtarı hem current_user hem de local_machine'e eklemem gerekiyordu. Ama sonra başarılı oldu.
Sarah Bailey

Bu blog gönderisi, weblog.west-wind.com/posts/2012/feb/15/… , Kayıt Defteri girişinin 32 bit veya 64 bit Windows olmasına bağlı olarak değişeceğinden bahseder. 32 bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATIONve 64 bit HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION.
Richard Chambers

129

WebBrowser kontrolü, yüklediğiniz IE sürümünü kullanacaktır, ancak uyumluluk nedeniyle sayfaları varsayılan olarak IE7 Standartları modunda işleyecektir.

Yeni IE9 özelliklerinden yararlanmak istiyorsanız, meta etiketi HTML sayfanızın etiketi <meta http-equiv="X-UA-Compatible" content="IE=9" >içine eklemelisiniz <head>.

Bu meta etiket, sizin de <head>düzgün çalışması için CSS, JavaScript dosyalarına vb. Bağlantılardan önce eklenmelidir (yalnızca diğer <meta>etiketler veya <title>etiket ondan önce gelebilir).

Alternatif olarak, aşağıdakilere bir kayıt defteri girişi eklemektir:

HKLM> YAZILIM> Microsoft> Internet Explorer> Ana> FeatureControl> FEATURE_BROWSER_EMULATION

Ve WebBrowser denetimini sayfaları IE9 modunda görüntülemeye zorlamak için oraya '9000' değerine sahip 'myApplicationName.exe' ekleyin. Sizin de kullanabileceğiniz başka değerler olsa da, kullandığınız değer ne olursa olsun IE 8 modunda bir sayfanın oluşturulması mümkün görünmediğinden, bu belgelerin tamamen doğru olmadığını unutmayın.

HKLM yerine HKCU'daki aynı yola kayıt defteri anahtarını eklemek de işe yarayacaktır - HKLM'ye yazmak, HKCU'nun olmadığı durumlarda yönetici ayrıcalıkları gerektirdiğinden bu yararlıdır.


2
İçerik bölümü için farklı değerler şurada bulunabilir: msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx
KB

Bu ayar bir CSS dosyasında saklanabilseydi daha mutlu olurdum. Şimdi birçok belgeyi gözden geçirmem gerekiyor veya Visual Studio'da çok satırlı bir arama ve değiştirme işlevi var mı?
KB

2
Meta etiketi denedim ama işe yaramadı. "HTML1115: X-UA-Uyumlu META etiketi ('IE = 9 ′) yok sayıldı çünkü belge modu zaten sonlandırıldı" şeklinde bir hata mesajı alıyordum ve bu beni evolpin.wordpress.com/2011/02/ web sayfasına yönlendiriyor 25 /… . Çözüm, meta etiketin <head> bloğu içindeki ilk öğe olmasını sağlamaktı.
Steg

21
64-bit Windows üzerinde 32-bit uygulamaları (32-bit MSIE çağıran) çalıştırıyorsanız, kayıt defteri girdisi HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION konumuna eklenmelidir. yerine.
igordc

1
Xsl / xslt aracılığıyla html oluşturuyordum ve regedit herhangi bir nedenle çalışmadı ... Meta hile yaptı. Teşekkürler!
MazarD

25

Çok şükür bunu buldum. Aşağıdakiler son derece önemlidir:

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

Bu olmadan, oluşturduğum raporların hiçbiri IE8'de harika çalışmasına rağmen IE9 yüklemesinden sonra çalışmazdı. Bir web tarayıcısı kontrolünde düzgün bir şekilde görünürlerdi, ancak .Print () 'i çağırdığımda eksik harfler, beyaz boşluk vb. Olurdu. Mozaikte bile işlenebilmesi gereken temel HTML idi. heh IE7 uyumluluk modunun neden karıştığından emin değilim. Özellikle, aynı sayfayı 5 kez yazdırabilir () ve her seferinde farklı harflerin eksik olmasını sağlayabilirsiniz. PDF çıktısına bile taşınır, bu yüzden kesinlikle tarayıcıdır.


17

64bit Windows hakkında birkaç kişiyi tedirgin eden bir not. Uygulamanız 64bit Windows altında çalışıyorsa, bunun yerine DWORD'u [HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION] altında ayarlamanız gerekir.


16

Sadece tamamlamak için ...

32 bit işletim sistemi için, şuraya bir kayıt defteri girişi eklemelisiniz:

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

*******VEYA*******

64 bit işletim sistemi için, şuraya bir kayıt defteri girişi eklemelisiniz:

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

Bu girdi DWORD, Webbrowser denetimini barındıran, çalıştırılabilir dosyanızın adı olmak üzere bir olmalıdır ; yani:

myappname.exe (MSDN web sayfasındaki gibi "Contoso.exe" KULLANMAYIN ... bu sadece bir yer tutucu adıdır)

Ardından DWORDaşağıdaki tabloya göre bir değer verin :

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

11001 ondalık veya 0x2AF9 onaltılık --- (IE 11 Öykünmesi) olarak değiştirdim çünkü bu VARSAYILAN değer değil (eğer IE 11 yüklüyse - veya herhangi bir sürümü).

Bu MSDN makalesi, Internet Explorer web tarayıcısı davranışını etkileyen diğer bazı Kayıt Defteri değişiklikleri hakkında notlar içerir.


1
DWORD kısmı çok önemlidir. QWORD çalışmayacak ve bu hata kolaylıkla yapılabilir.
pvieira

VS altında hata ayıklarken, myappname.vshost.exe için de bir girdi eklemelisiniz. Öte yandan, uygulamayı hata ayıklayıcıdan ve ardından hata ayıklayıcıdan başlatmanın da işe yarayacağından şüpheleniyorum. Sanırım benim için bir kez çalıştı; ama% 100 emin değilim.
Şirin Baba

1
IE11 yapılandırmam nedeniyle, IE11'i açmam ve hedef URL'yi güvenilir sitelerime eklemem gerekiyordu. Bu olmadan, kayıt defterim düzgün şekilde yapılandırılmış olsa bile sayfa komut dosyaları çalışmazdı.
Tony

15

Bu konunun eski olduğunu biliyorum ve zaten kapsamlı cevaplar var.

Bunu bilmiyorsan diye:

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

IE sürüm numarasını şu şekilde kodlamanız gerekmez:

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


Bu, sorunla ilgili değildir - WebBrowser denetimi, belirli programınız için bir kayıt defteri ayarı ile geçersiz kılınmadıkça yalnızca IE7 modunda yüklenir.
Christian

4
@Christian Emin misin? <meta http-equiv="X-UA-Compatible" content="IE=edge" >Anlayabildiğim kadarıyla , web sayfası başlıkta varsa, webBrowser en son IE modunda yüklenecektir. Mikel'in yanıtına neden 90'dan fazla olumlu oy var? çünkü çözümü işe yarıyor. Web sayfasını değiştirebiliyorsanız kayıt defterini değiştirmek gerekmez.
Tyler Long

% 100 pozitifim, ancak bunun web sitesinin konumuna da bağlı olduğunu düşünüyorum. Yerel içerik yüklüyordum ve sürümün değişmesinin tek yolu kayıt defterinden geçiyor. Güven bana, işe yarayan her şey için kayıt defteri çözümünü çöpe atardım, ancak başka hiçbir şey işe yaramadı.
Christian

ie = edge, kayıt defterine dokunmadan benim için çalıştı. Teşekkürler!
Yisroel M. Olewski

@Christian bu aslında soruyla ilgili - çözüm iyi çalışıyor.
MarzSocks

6

Sağlanan çözüme tamamen katılıyorum, ancak biraz açıklamanın önemli olduğunu düşünüyorum, gerekli olabilir diye düşünüyorum.

Sağlanan değere sahip bir DWORD eklemesi gereken her işlem için (ayrıca okuyun: vshost.exe, yourWinformApplication.exe.svchost veya uygulama.exe'nizin adı), benim durumumda uygulamada 9000'i (ondalık olarak) bırakıyorum adı ve sorunsuz ve hatasız betik çalıştırma.

En yaygın hata, "contoso.exe" yi OLDUĞU GİBİ eklemenin gerekli olduğuna inanmak ve hepsinin işe yaradığını düşünmektir!


3

Evet, WebBrowser kontrolü, yüklediğiniz IE sürümünü kullanır. Bu, tabii ki, uygulamanızı IE 8 bulunan bir makinede çalıştırırsanız, bağlı olduğunuz IE 9 özelliklerinin kullanılamayacağı anlamına gelir.


2
Cevabımı tekrar oku. Olumsuz oy gereksizdi. IE9 özelliklerini kullanmaya çalıştıktan sonra IE9 olmayan bir makineye konuşlandırırsa, bu özelliklerin çalışmayacağını söyledim. Geriye dönük uyumluluk kayıt defteri ayarınız bu gerçeği değiştirmeyecektir.
Josh

16
İlk cümlenin açıkça yanlış. İkinci cümlenin, en azından hem açık hem de tembel. BTW, misilleme olumsuz oyu için teşekkürler. Çok olgun.
whitehawk

3
WebBrowser denetimi, yüklü olan IE sürümünü kullanır; ancak tespit betiği bunun farkında olmayabilir. Bu [siteyi ( whatismybrowser.com/)][1] deneyin . Diğer sitelerin bana yanlış bilgi verdiğini biliyorum, ancak bu site tarayıcıyı makinemde yüklü olan IE sürümü olarak doğru bir şekilde tanımladı. [1]: whatismybrowser.com
cjbarth

3

Bu çözüme geldim ve benim için işe yaramadı! 64bit kullandığım için kayıt defterini değiştirmek zorunda kaldım:

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

Herkesin bahsettiği şey yerine:

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

1

Aşağıda uygulamanız için kayıt defteri ayarlarını belirleyen (C #) kodunu beğendim. İzin gerekli olsa da kurulumdan sonra kesip kesmeyeceğinden emin değilim. Benim için WebSocket'in WPF'de bir WebBrowser kontrolünde bulunmaması ile ilgili bir sorunu çözdü.

C # webbrowser Ajax çağrısı


1

Aynı sorunu yaşadım ve buradaki kayıt cevapları işe yaramadı.

Programımın yeni sürümünde, XP'de iyi çalışan, Windows 7'de (64 bit) başarısız olan bir tarayıcı kontrolüm vardı. Eski sürüm hem XP hem de Windows 7'de çalışıyordu.

Tarayıcıda görüntülenen web sayfası, eski SVG haritalarını göstermek için bazı garip eklentiler kullanıyor (bunun bir Java uygulaması olduğunu düşünüyorum).

Sorunun Windows 7'deki DEP korumasıyla ilgili olduğu ortaya çıktı.

Dotnet 2'nin eski sürümleri, exe'de DEP için gerekli bayrağı ayarlamadı, ancak dotnet 2, SP 1'den sonra yaptı (evet, derleme davranışı ve dolayısıyla exe'nin çalışma zamanı davranışı, derlediğiniz makineye bağlı olarak değişti, güzel. ..).

Bir MSDN blogu NXCOMPAT ve C # derleyicisinde belgelenmiştir . Alıntı yapmak gerekirse: Bu şüphesiz birkaç geliştiriciyi şaşırtacak ... bir çerçeve hizmet paketi indirin, yeniden derleyin, uygulamanızı çalıştırın ve şimdi IP_ON_HEAP istisnaları alıyorsunuz.

Visual Studio'daki post derlemesine aşağıdakileri eklemek, exe için DEP'yi kapatır ve her şey beklendiği gibi çalışır:

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

-3

Whitehawk'ın kabul ettiği cevapla ilgili olarak. Ben sadece deneyime biraz pratik eklemeye çalışıyorum. Sadece bir yorum eklemeye çalışıyordum ama SO çok uzun olduğundan şikayet ediyor.

Temel olarak, IE 9 yüklenmeden, FEATURE_BROWSER_EMULATION kayıt defteri anahtarı HER ŞEY çalışmaz.

Örneğin, bugün kendi deneyimim .net web kontrolünü IE10 modunda çalıştırmaya çalışıyordum çünkü oluşturmaya çalıştığım bir html, VS2012 altında .netControl ile çalışmayacak ve hatta html'yi IE8'e yüklediğimde bile çalışmayacaktır. doğrudan, yine de css düzgün şekilde görüntülenmiyor (engellenen içeriğe izin ver dememe rağmen) Ama aynı html okunu IE10 ile bir arkadaşımın win 8 makinesinde test ettim. Bu yüzden .net webControl'ü IE 10 moduna ayarlamaya çalışıyorum ama başarısız olmaya devam ediyorum ...

Şimdi bunun bcos olduğunu anladım, win 7 makinemde sadece IE8 kurulu, bu yüzden FEATURE_BROWSER_EMULATION anahtarına hangi değeri ayarladığımdan bağımsız olarak (IE9, IE10 IE11 değeri), sadece HER ŞEY çalışmayacak!

Sonra IE 10'u win 7 makineme indirip kurdum. Yine de çalışmıyor, sonra FEATURE_BROWSER_EMULATION ekledim, çalışmaya başladı!

Ayrıca hangi değeri ayarladığım, hatta varsayılan olarak 0 değerine ayarladığımdan bağımsız olarak, webControl hala benim için çalışan IE 10 modunu kullanıyor.

Özetlemek gerekirse, IE X'iniz kurulu ise ancak .Net webControl'ün IE (X + N) N> 0 modo altında çalışmasını istiyorsanız, yapmanız gereken İKİ şey :

  1. MS web sitesine gidin ve makinenize IE (X + N) dosyasını indirip yükleyin, kurulumdan sonra yeniden başlatmanız gerekecektir.

  2. whitehawk'ın cevabını uygulayın.

Temel olarak: Kayıt defterini kullanarak bu özelliğin değerini kontrol etmek için, yürütülebilir dosyanızın adını aşağıdaki ayara ekleyin ve değeri istenen ayarla eşleşecek şekilde ayarlayın.

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

Windows Internet Explorer 8 ve üzeri. FEATURE_BROWSER_EMULATION özelliği, Internet Explorer için varsayılan öykünme modunu tanımlar ve aşağıdaki değerleri destekler.

Değer Açıklama

  • 11001 (0x2AF9 Internet Explorer 11. Web sayfaları! DOCTYPE yönergesine bakılmaksızın IE11 kenar modunda görüntülenir.

    11000 (0x2AF8), IE11. Standartlara dayalı! DOCTYPE yönergelerini içeren web sayfaları IE11 kenar modunda görüntülenir. IE11 için varsayılan değer.

    10001 (0x2711) Internet Explorer 10. Web sayfaları,! DOCTYPE yönergesine bakılmaksızın IE10 Standartları modunda görüntülenir.

    10000 (0x02710) Internet Explorer 10. Standartlara dayalı! DOCTYPE yönergelerini içeren web sayfaları IE10 Standartları modunda görüntülenir. Internet Explorer 10 için varsayılan değer.

    9999 (0x270F) Windows Internet Explorer 9. Web sayfaları,! DOCTYPE yönergesine bakılmaksızın IE9 Standartları modunda görüntülenir.

    9000 (0x2328) Internet Explorer 9. Standartlara dayalı! DOCTYPE yönergeleri içeren web sayfaları IE9 modunda görüntülenir. Internet Explorer 9 için varsayılan değer.

    Önemli Internet Explorer 10'da, standartlara dayalı! DOCTYPE yönergeleri içeren Web sayfaları IE10 Standartları modunda görüntülenir.

    8888 (0x22B8) Web sayfaları,! DOCTYPE yönergesine bakılmaksızın IE8 Standartları modunda görüntülenir.

    8000 (0x1F40) Standartlara dayalı! DOCTYPE yönergeleri içeren web sayfaları IE8 modunda görüntülenir. Internet Explorer 8 için varsayılan değer Önemli Internet Explorer 10'da, standartlara dayalı! DOCTYPE yönergeleri içeren Web sayfaları IE10 Standartları modunda görüntülenir.

    7000 (0x1B58) Standartlara dayalı! DOCTYPE yönergeleri içeren web sayfaları, IE7 Standartları modunda görüntülenir. WebBrowser Kontrolünü barındıran uygulamalar için varsayılan değer.

Tam ref burada


without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.- Bu yanlış. Yalnızca IE8 yükledim ve web tarayıcısını farklı işleme modlarına sokmak için anahtarı mükemmel şekilde kullanabilirim.
GSerg

IE10 modunu almaya çalışırken IE8'i denedim, hiç çalışmayacak! Tekrar denedim, işe yaramadı
Gob00st
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.