IE9 WebBrowser Control có hỗ trợ tất cả các tính năng của IE9, bao gồm cả SVG không?


84

Gần đây tôi đã nâng cấp lên IE9-beta. Bây giờ, trong ứng dụng WinForm .Net (3.5) của tôi, tôi muốn sử dụng WebBrowserquyền điều khiển.

Vì vậy, câu hỏi của tôi là, liệu WebBrowserđiều khiển sẽ hiển thị tất cả các thuộc tính và chức năng của IE9?

Mối quan tâm của tôi là, tôi muốn kết xuất một số đồ họa SVG trên đó.

Câu trả lời:


82

"Phiên bản" IE9 của điều khiển WebBrowser, giống như phiên bản IE8, thực sự là một số trình duyệt trong một. Không giống như phiên bản IE8, bạn có nhiều quyền kiểm soát hơn đối với chế độ kết xuất bên trong trang bằng cách thay đổi loại tài liệu. Tất nhiên, để thay đổi chế độ trình duyệt, bạn phải đặt sổ đăng ký của mình giống như câu trả lời trước đó. Đây là phân đoạn tệp reg cho 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

Đây là bộ mã hoàn chỉnh:

  • 9999 (0x270F) - Internet Explorer 9. Các trang web được hiển thị ở chế độ Tiêu chuẩn IE9, bất kể chỉ thị! DOCTYPE.
  • 9000 (0x2328) - Internet Explorer 9. Các trang web chứa chỉ thị DOCTYPE dựa trên tiêu chuẩn được hiển thị ở chế độ IE9.
  • 8888 (0x22B8) -Các trang được hiển thị ở chế độ Tiêu chuẩn IE8, bất kể chỉ thị! DOCTYPE.
  • 8000 (0x1F40) - Các trang web chứa chỉ thị DOCTYPE dựa trên tiêu chuẩn được hiển thị ở chế độ IE8.
  • 7000 (0x1B58) - Các trang web chứa chỉ thị DOCTYPE dựa trên tiêu chuẩn được hiển thị ở chế độ Tiêu chuẩn IE7.

Toàn bộ tài liệu:

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


8
Khi cài đặt IE 9, có vẻ như không thể hiển thị trang ở chế độ IE 8. Đặt giá trị thành 7000 sẽ đặt ở chế độ IE 7 và 8000/8888/9000/9999 đặt nó ở chế độ IE 9. Dù đây là một loại lỗi nào đó hay là do cố ý thì tôi không biết.
mikel

2
Tôi phải thêm khóa vào cả current_user và local_machine trước khi nó bắt đầu hoạt động với tôi. Nhưng đã thành công sau đó.
Sarah Bailey

Bài đăng trên blog này, weblog.west-wind.com/posts/2012/feb/15/… đề cập rằng mục Registry sẽ khác nhau tùy thuộc vào Windows 32 bit hay 64 bit. 32 bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATIONvà 64 bit HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION.
Richard Chambers

129

Điều khiển WebBrowser sẽ sử dụng bất kỳ phiên bản IE nào bạn đã cài đặt, nhưng vì lý do tương thích, nó sẽ hiển thị các trang ở chế độ Tiêu chuẩn IE7 theo mặc định.

Nếu bạn muốn tận dụng các tính năng mới của IE9, bạn nên thêm thẻ meta <meta http-equiv="X-UA-Compatible" content="IE=9" >bên trong <head>thẻ của trang HTML của mình.

Tuy nhiên, thẻ meta này phải được thêm vào trước bất kỳ liên kết nào đến CSS, tệp JavaScript, v.v. cũng có trong thẻ của bạn <head>để hoạt động bình thường (chỉ các <meta>thẻ khác hoặc <title>thẻ có thể đứng trước thẻ).

Một thay thế là thêm một mục đăng ký vào:

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

Và trong đó thêm 'myApplicationName.exe' với giá trị '9000' để buộc điều khiển WebBrowser hiển thị các trang ở chế độ IE9. Mặc dù bạn cũng có thể sử dụng các giá trị khác , nhưng lưu ý rằng các tài liệu này không hoàn toàn chính xác vì dường như không thể khiến một trang hiển thị ở chế độ IE 8 bất kể giá trị nào bạn sử dụng.

Thêm khóa đăng ký vào cùng một đường dẫn trong HKCU thay vì HKLM cũng sẽ hoạt động - điều này rất hữu ích vì việc ghi vào HKLM yêu cầu đặc quyền quản trị ở những nơi mà HKCU không làm.


2
Các giá trị khác nhau cho phần nội dung có thể được tìm thấy tại đây: msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx
KB

Nếu cài đặt này có thể được lưu trữ trong tệp CSS, tôi sẽ hạnh phúc hơn. Bây giờ tôi phải xem qua nhiều tài liệu hoặc có chức năng tìm kiếm và thay thế nhiều dòng trong Visual Studio không?
KB

2
Tôi đã thử thẻ meta nhưng nó sẽ không hoạt động. Tôi nhận được thông báo lỗi cho biết "HTML1115: Thẻ META tương thích X-UA ('IE = 9 ′) bị bỏ qua vì chế độ tài liệu đã được hoàn thiện.", Dẫn tôi đến trang web evolpin.wordpress.com/2011/02/ 25 /… . Giải pháp sau đó là đảm bảo rằng thẻ meta là phần tử đầu tiên bên trong khối <head>.
Steg

21
Hãy cẩn thận, nếu bạn đang chạy các ứng dụng 32 bit (gọi là MSIE 32 bit) trên Windows 64 bit, mục đăng ký phải được thêm vào HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION thay thế.
igordc

1
Tôi đang hiển thị html thông qua xsl / xslt và regedit không hoạt động vì một số lý do ... meta đã thực hiện thủ thuật. Cảm ơn!
MazarD

25

Cảm ơn chúa tôi đã tìm thấy điều này. Điều sau là cực kỳ quan trọng:

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

Nếu không có điều này, không có báo cáo nào mà tôi đã tạo sẽ hoạt động khi cài đặt IE9 mặc dù đã hoạt động tốt trong IE8. Chúng sẽ hiển thị chính xác trong điều khiển trình duyệt web, nhưng sẽ bị thiếu các chữ cái, chiếm khoảng trắng, v.v., khi tôi gọi .Print (). Chúng chỉ là HTML cơ bản có thể được hiển thị ngay cả trong Mosaic. heh Không chắc tại sao chế độ tương thích của IE7 lại bị hỏng. Đáng chú ý, bạn có thể .Print () cùng một trang 5 lần và mỗi lần nó lại thiếu các chữ cái khác nhau. Nó thậm chí sẽ chuyển sang đầu ra PDF, vì vậy nó chắc chắn là trình duyệt.


17

Một lưu ý về Windows 64bit dường như có tác dụng đối với một số người. Nếu ứng dụng của bạn đang chạy trên Windows 64bit, bạn có thể phải đặt DWORD trong [HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION].


16

Chỉ để hoàn thành ...

Đối với hệ điều hành 32 bit, bạn phải thêm một mục đăng ký vào:

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

*******HOẶC LÀ*******

Đối với hệ điều hành 64 bit, bạn phải thêm một mục đăng ký vào:

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

Mục nhập này phải là một DWORD, với tên là tên tệp thực thi của bạn, lưu trữ điều khiển Trình duyệt web; I E:

myappname.exe (KHÔNG SỬ DỤNG "Contoso.exe" như trong trang web MSDN ... nó chỉ là tên trình giữ chỗ)

Sau đó, cung cấp cho nó một DWORDgiá trị, theo bảng trên:

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

Tôi đã đổi thành 11001 thập phân hoặc 0x2AF9 hex --- (IE 11 EMULATION) vì đó không phải là giá trị DEFAULT (nếu bạn đã cài đặt IE 11 - hoặc bất kỳ phiên bản nào).

Bài viết MSDN đó có ghi chú về một số thay đổi Registry khác ảnh hưởng đến hành vi của trình duyệt web Internet Explorer.


1
Phần DWORD rất quan trọng. QWORD sẽ không hoạt động và người ta có thể dễ dàng mắc phải sai lầm đó.
pvieira

Tôi muốn nói thêm rằng, khi bạn đang gỡ lỗi trong VS, bạn cũng nên thêm một mục nhập cho myappname.vshost.exe. Mặt khác, tôi nghi ngờ rằng chỉ cần khởi chạy ứng dụng ra khỏi trình gỡ lỗi và sau đó trong trình gỡ lỗi cũng sẽ thực hiện thủ thuật. Tôi nghĩ rằng nó đã làm việc một lần cho tôi; nhưng tôi không chắc 100%.
Papa Smurf

1
Do cấu hình IE11 của tôi, tôi cần mở IE11 và thêm URL đích vào các trang web đáng tin cậy của mình. Nếu không có điều này, mặc dù sổ đăng ký của tôi đã được định cấu hình đúng cách, các tập lệnh trang sẽ không chạy.
Tony

15

Tôi biết chủ đề này đã cũ và đã có câu trả lời toàn diện.

Đề phòng trường hợp bạn không biết điều này:

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

Bạn không cần phải mã hóa số phiên bản IE là

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


Điều này không liên quan đến vấn đề - điều khiển WebBrowser chỉ tải ở chế độ IE7 trừ khi ghi đè cài đặt đăng ký cho chương trình cụ thể của bạn.
Christian

4
@Christian Bạn có chắc không? Theo như tôi có thể nói, nếu trang web có <meta http-equiv="X-UA-Compatible" content="IE=edge" >trong tiêu đề, trình duyệt web sẽ tải ở chế độ IE mới nhất. Tại sao có hơn 90 lượt ủng hộ cho anwer của mikel? bởi vì giải pháp của anh ấy hoạt động. Thay đổi sổ đăng ký là không cần thiết nếu bạn có thể thay đổi trang web.
Tyler Long

Tôi hoàn toàn tích cực, tuy nhiên tôi nghĩ nó cũng phụ thuộc vào vị trí trang web. Tôi đang tải nội dung cục bộ và cách duy nhất để phiên bản hoạt động là thông qua sổ đăng ký. Tin tôi đi, tôi sẽ vứt bỏ giải pháp đăng ký cho bất kỳ thứ gì khác hoạt động, nhưng dường như không có gì khác hoạt động.
Christian

tức là = cạnh làm việc cho tôi, mà không cần tôi chạm vào sổ đăng ký. cảm ơn!
Yisroel M. Olewski,

@Christian điều này thực sự liên quan đến câu hỏi - giải pháp hoạt động tốt.
MarzSocks

6

Tôi hoàn toàn đồng ý với giải pháp được cung cấp, nhưng tôi nghĩ rằng tôi nghĩ cần phải làm rõ một chút.

Đối với mỗi quy trình (đọc thêm: vshost.exe, yourWinformApplication.exe.svchost hoặc tên của ứng dụng.exe của bạn) sẽ cần thêm DWORD với giá trị được cung cấp, trong trường hợp của tôi, tôi để 9000 (ở dạng thập phân) trong ứng dụng tên và tập lệnh chạy trơn tru và không có lỗi.

sai lầm phổ biến nhất là tin rằng cần phải thêm "contoso.exe" NHƯ LÀ và nghĩ rằng tất cả đều hoạt động!


3

Có, điều khiển WebBrowser sử dụng bất kỳ phiên bản IE nào bạn đã cài đặt. Tất nhiên, điều này có nghĩa là nếu bạn chạy ứng dụng của mình trên máy có IE 8 thì các tính năng của IE 9 mà bạn phụ thuộc vào sẽ không khả dụng.


2
Đọc lại câu trả lời của tôi một lần nữa. Phiếu giảm giá không được gọi. Tôi đã nói rằng nếu anh ta cố gắng sử dụng các tính năng của IE9 sau đó triển khai cho một máy không có IE9, những tính năng đó sẽ không hoạt động. Cài đặt đăng ký tương thích ngược của bạn sẽ không thay đổi thực tế đó.
Josh

16
Câu đầu tiên của bạn là sai nghiêm trọng. Câu thứ hai của bạn, ít nhất là cả hai rõ ràng và lười biếng. BTW cảm ơn vì đã phản đối. Rất trưởng thành.
whitehawk,

3
Điều khiển WebBrowser sử dụng bất kỳ phiên bản IE nào được cài đặt; tuy nhiên kịch bản phát hiện có thể không nhận ra điều đó. Hãy thử [site ( whatismybrowser.com/)][1] này . Tôi biết các trang web khác đã cung cấp thông tin sai cho tôi, nhưng trang web này đã xác định chính xác trình duyệt là phiên bản IE được cài đặt trên máy của tôi. [1]: whatismybrowser.com
cjbarth

3

Tôi đã tìm đến giải pháp này và nó không hiệu quả với tôi! Bởi vì tôi đang sử dụng 64bit, tôi phải thay thế sổ đăng ký:

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

Thay vì cái mà mọi người nói về:

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

1

Tôi thích mã (C #) trong phần sau để đặt cài đặt đăng ký cho ứng dụng của bạn. Không chắc chắn nếu nó sẽ cắt nó sau khi cài đặt, mặc dù nếu quyền được yêu cầu. Đối với tôi, nó đã giải quyết được sự cố với WebSocket không khả dụng bên trong điều khiển WebBrowser trong WPF.

C # webbrowser Ajax cuộc gọi


1

Tôi đã gặp vấn đề tương tự và câu trả lời đăng ký ở đây không hoạt động.

Tôi đã có một điều khiển trình duyệt trong phiên bản mới của chương trình hoạt động tốt trên XP, không thành công trong Windows 7 (64 bit). Phiên bản cũ hoạt động trên cả XP và Windows 7.

Trang web được hiển thị trong trình duyệt sử dụng một số plugin lạ để hiển thị bản đồ SVG cũ (tôi nghĩ nó là một ứng dụng Java).

Hóa ra vấn đề liên quan đến bảo vệ DEP trong Windows 7.

Các phiên bản cũ của dotnet 2 không đặt cờ yêu cầu DEP trong exe, nhưng từ dotnet 2, SP 1 trở đi thì nó đã làm được (vâng, hành vi biên dịch và do đó hành vi thời gian chạy của exe thay đổi tùy thuộc vào máy bạn đã biên dịch, tốt lắm. ..).

Nó được ghi lại trên blog MSDN NXCOMPAT và trình biên dịch C # . Để trích dẫn: Điều này chắc chắn sẽ gây ngạc nhiên cho một số nhà phát triển ... tải xuống gói dịch vụ khung, biên dịch lại, chạy ứng dụng của bạn và bây giờ bạn đang nhận được ngoại lệ IP_ON_HEAP.

Thêm phần sau vào bản dựng bài trong Visual Studio, tắt DEP cho exe và mọi thứ hoạt động như mong đợi:

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

-3

Về câu trả lời được chấp nhận của whitehawk. Tôi chỉ đang cố gắng thêm một chút kinh nghiệm. Tôi chỉ cố gắng thêm một bình luận, nhưng SO phàn nàn rằng nó quá dài.

Về cơ bản, nếu không cài đặt IE 9, công tắc đăng ký FEATURE_BROWSER_EMULATION sẽ không hoạt động TẤT CẢ.

Ví dụ: kinh nghiệm của riêng tôi hôm nay, tôi đang cố gắng để điều khiển web .net hoạt động với chế độ IE10 vì một html mà tôi đang cố kết xuất sẽ không hoạt động với .netControl trong VS2012 và thậm chí không hoạt động khi tôi tải html vào IE8 trực tiếp, css vẫn không hiển thị đúng cách (ngay cả sau khi tôi nói cho phép nội dung bị chặn). Nhưng tôi đã thử nghiệm cùng một html ok với IE10 trên máy win 8 của một người bạn. Đó là lý do tại sao tôi đang cố gắng đặt .net webControl thành chế độ IE 10 nhưng vẫn không thành công ...

Bây giờ tôi đã tìm ra đây là bcos máy win 7 của tôi chỉ cài đặt IE8, vì vậy bất kể giá trị nào tôi đặt thành công tắc FEATURE_BROWSER_EMULATION (giá trị thành IE9, IE10 IE11), nó sẽ không hoạt động TẤT CẢ!

Sau đó, tôi tải về và cài đặt IE 10 trên máy win 7 của mình. Nó vẫn không hoạt động, sau đó tôi đã thêm FEATURE_BROWSER_EMULATION, nó bắt đầu hoạt động!

Ngoài ra, tôi nhận thấy bất kể giá trị nào tôi đặt, thậm chí đặt nó thành giá trị 0 theo mặc định, webControl vẫn đang sử dụng chế độ IE 10 vẫn hoạt động với tôi.

Tóm lại, nếu bạn đã cài đặt IE X nhưng bạn muốn .Net webControl của mình hoạt động theo modo IE (X + N) N> 0, thì bạn cần phải làm HAI điều sau:

  1. Truy cập trang web MS & tải xuống và cài đặt IE (X + N) trên máy tính của bạn, bạn sẽ cần khởi động lại sau khi cài đặt.

  2. áp dụng câu trả lời của whitehawk.

Về cơ bản: Để kiểm soát giá trị của tính năng này bằng cách sử dụng sổ đăng ký, hãy thêm tên tệp thực thi của bạn vào cài đặt sau và đặt giá trị để khớp với cài đặt mong muố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 trở lên. Tính năng FEATURE_BROWSER_EMULATION xác định chế độ giả lập mặc định cho Internet Explorer và hỗ trợ các giá trị sau.

Mô tả giá trị

  • 11001 (0x2AF9 Internet Explorer 11. Các trang web được hiển thị ở chế độ cạnh IE11, bất kể chỉ thị! DOCTYPE.

    11000 (0x2AF8) IE11. Các trang web chứa chỉ thị DOCTYPE dựa trên tiêu chuẩn được hiển thị ở chế độ cạnh IE11. Giá trị mặc định cho IE11.

    10001 (0x2711) Internet Explorer 10. Các trang web được hiển thị ở chế độ Tiêu chuẩn IE10, bất kể chỉ thị! DOCTYPE.

    10000 (0x02710) Internet Explorer 10. Các trang web chứa chỉ thị DOCTYPE dựa trên tiêu chuẩn được hiển thị ở chế độ Tiêu chuẩn IE10. Giá trị mặc định cho Internet Explorer 10.

    9999 (0x270F) Windows Internet Explorer 9. Các trang web được hiển thị ở chế độ Tiêu chuẩn IE9, bất kể chỉ thị! DOCTYPE.

    9000 (0x2328) Internet Explorer 9. Các trang web chứa chỉ thị DOCTYPE dựa trên tiêu chuẩn được hiển thị ở chế độ IE9. Giá trị mặc định cho Internet Explorer 9.

    Quan trọng Trong Internet Explorer 10, các trang web chứa chỉ thị DOCTYPE dựa trên tiêu chuẩn được hiển thị trong chế độ Tiêu chuẩn IE10.

    8888 (0x22B8) Các trang web được hiển thị ở chế độ Tiêu chuẩn IE8, bất kể chỉ thị! DOCTYPE.

    8000 (0x1F40) Các trang web chứa chỉ thị DOCTYPE dựa trên tiêu chuẩn được hiển thị ở chế độ IE8. Giá trị mặc định cho Internet Explorer 8 Quan trọng Trong Internet Explorer 10, các trang web chứa chỉ thị DOCTYPE dựa trên tiêu chuẩn được hiển thị ở chế độ Tiêu chuẩn IE10.

    7000 (0x1B58) Các trang web chứa chỉ thị DOCTYPE dựa trên tiêu chuẩn được hiển thị ở chế độ Tiêu chuẩn IE7. Giá trị mặc định cho các ứng dụng lưu trữ Kiểm soát WebBrowser.

Giới thiệu đầy đủ tại đây


without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.- cái này sai. Tôi chỉ cài đặt IE8 và tôi hoàn toàn có thể sử dụng công tắc để đưa trình duyệt web vào các chế độ hiển thị khác nhau.
GSerg

Tôi đã thử cài đặt IE8 đang cố gắng chuyển sang chế độ IE10, hoàn toàn không hoạt động! Vừa thử lại, không hoạt động
Gob00st
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.