ฉันเพิ่งอัปเกรดเป็น IE9-beta ตอนนี้ในแอปพลิเคชัน WinForm .Net (3.5) ของฉันฉันต้องการใช้WebBrowser
การควบคุม
ดังนั้นคำถามของฉันคือWebBrowser
คอนโทรลจะแสดงคุณสมบัติและฟังก์ชันทั้งหมดของ IE9 หรือไม่?
ข้อกังวลของฉันคือฉันต้องการแสดงกราฟิก SVG บนมัน
ฉันเพิ่งอัปเกรดเป็น IE9-beta ตอนนี้ในแอปพลิเคชัน WinForm .Net (3.5) ของฉันฉันต้องการใช้WebBrowser
การควบคุม
ดังนั้นคำถามของฉันคือWebBrowser
คอนโทรลจะแสดงคุณสมบัติและฟังก์ชันทั้งหมดของ IE9 หรือไม่?
ข้อกังวลของฉันคือฉันต้องการแสดงกราฟิก SVG บนมัน
คำตอบ:
"เวอร์ชัน" ของตัวควบคุมเว็บเบราว์เซอร์ IE9 เช่นเวอร์ชัน IE8 เป็นเบราว์เซอร์หลายตัวในตัวเดียว ซึ่งแตกต่างจากเวอร์ชัน IE8 คุณสามารถควบคุมโหมดการแสดงผลภายในหน้าได้มากขึ้นเล็กน้อยโดยการเปลี่ยนประเภทหลัก แน่นอนในการเปลี่ยนโหมดเบราว์เซอร์คุณต้องตั้งค่ารีจิสทรีของคุณเหมือนคำตอบก่อนหน้านี้ นี่คือส่วนของไฟล์ reg สำหรับ 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
นี่คือชุดรหัสที่สมบูรณ์:
เอกสารฉบับเต็ม:
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
และ 64 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
บิต
การควบคุมเว็บเบราว์เซอร์จะใช้ IE เวอร์ชันใดก็ตามที่คุณติดตั้งไว้ แต่ด้วยเหตุผลด้านความเข้ากันได้ระบบจะแสดงเพจในโหมดมาตรฐาน IE7 ตามค่าเริ่มต้น
หากคุณต้องการใช้ประโยชน์จากคุณสมบัติใหม่ของ IE9 คุณควรเพิ่มเมตาแท็ก<meta http-equiv="X-UA-Compatible" content="IE=9" >
ไว้ใน<head>
แท็กของหน้า HTML ของคุณ
ต้องเพิ่มเมตาแท็กนี้ก่อนลิงก์ไปยัง CSS ไฟล์ JavaScript และอื่น ๆ ที่อยู่ในของคุณ<head>
เพื่อให้ทำงานได้อย่างถูกต้อง (เฉพาะ<meta>
แท็กอื่นหรือ<title>
แท็กเท่านั้นที่สามารถอยู่ข้างหน้าได้)
อีกทางเลือกหนึ่งคือการเพิ่มรายการรีจิสทรีไปที่:
HKLM> ซอฟต์แวร์> Microsoft> Internet Explorer> หลัก> FeatureControl> FEATURE_BROWSER_EMULATION
และในนั้นเพิ่ม 'myApplicationName.exe' ด้วยค่า '9000' เพื่อบังคับให้ตัวควบคุมเว็บเบราว์เซอร์แสดงเพจในโหมด IE9 แม้ว่าจะมีค่าอื่น ๆ ที่คุณสามารถใช้ได้เช่นกัน แต่โปรดทราบว่าเอกสารเหล่านี้ไม่ถูกต้องทั้งหมดเนื่องจากดูเหมือนจะไม่สามารถรับหน้าเพื่อแสดงผลในโหมด IE 8 ได้ไม่ว่าคุณจะใช้ค่าใดก็ตาม
การเพิ่มคีย์รีจิสทรีในเส้นทางเดียวกันใน HKCU แทน HKLM จะใช้ได้เช่นกันซึ่งมีประโยชน์เนื่องจากการเขียนถึง HKLM ต้องใช้สิทธิ์ของผู้ดูแลระบบโดยที่ HKCU ไม่มี
ขอบคุณพระเจ้าที่ฉันพบสิ่งนี้ สิ่งต่อไปนี้มีความสำคัญอย่างยิ่ง:
<meta http-equiv="X-UA-Compatible" content="IE=9" >
หากไม่มีสิ่งนี้รายงานที่ฉันสร้างขึ้นจะไม่สามารถโพสต์การติดตั้ง IE9 ได้แม้ว่าจะทำงานได้ดีใน IE8 ก็ตาม พวกเขาจะแสดงอย่างถูกต้องในการควบคุมเว็บเบราว์เซอร์ แต่จะมีตัวอักษรหายไปมีช่องว่างสีขาว ฯลฯ เมื่อฉันเรียก. พิมพ์ () พวกเขาเป็นเพียง HTML พื้นฐานที่ควรสามารถแสดงผลได้แม้ใน Mosaic ไม่แน่ใจว่าทำไมโหมดความเข้ากันได้ของ IE7 จึงยุ่งเหยิง โดยเฉพาะอย่างยิ่งคุณสามารถพิมพ์ () หน้าเดียวกันได้ 5 ครั้งและไม่มีตัวอักษรต่างกันในแต่ละครั้ง มันจะส่งต่อไปยังเอาต์พุต PDF ดังนั้นจึงเป็นเบราว์เซอร์อย่างแน่นอน
หมายเหตุเกี่ยวกับ Windows 64 บิตซึ่งดูเหมือนว่าจะมีคนไม่กี่คน หากแอปของคุณทำงานภายใต้ Windows 64 บิตคุณอาจต้องตั้งค่า DWORD ภายใต้ [HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION] แทน
เพียงเพื่อให้สมบูรณ์ ...
สำหรับระบบปฏิบัติการ 32 บิตคุณต้องเพิ่มรายการรีจิสทรีใน:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
*******หรือ*******
สำหรับระบบปฏิบัติการ 64 บิตคุณต้องเพิ่มรายการรีจิสทรีใน:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
รายการนี้ต้องเป็น a DWORD
โดยชื่อเป็นชื่อของไฟล์ปฏิบัติการของคุณที่โฮสต์การควบคุมเว็บเบราว์เซอร์ กล่าวคือ:
myappname.exe (อย่าใช้ "Contoso.exe" เหมือนในหน้าเว็บ MSDN ... เป็นเพียงชื่อตัวยึดเท่านั้น)
จากนั้นให้DWORD
ค่าตามตารางบน:
http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation
ฉันเปลี่ยนเป็น 11001 decimal หรือ 0x2AF9 hex --- (IE 11 EMULATION) เนื่องจากนั่นไม่ใช่ค่า DEFAULT (หากคุณติดตั้ง IE 11 - หรือเวอร์ชันใดก็ตาม)
บทความ MSDN นั้นประกอบด้วยหมายเหตุเกี่ยวกับการเปลี่ยนแปลงรีจิสทรีอื่น ๆ ที่มีผลต่อพฤติกรรมของเว็บเบราว์เซอร์ Internet Explorer
ฉันรู้ว่ากระทู้นี้เก่าและมีคำตอบที่ครอบคลุมอยู่แล้ว
ในกรณีที่คุณไม่ทราบสิ่งนี้:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
คุณไม่จำเป็นต้องฮาร์ดโค้ดหมายเลขเวอร์ชัน IE เป็น
<meta http-equiv="X-UA-Compatible" content="IE=9" >
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
ส่วนหัวอยู่เว็บเบราว์เซอร์จะโหลดในโหมด IE ล่าสุด เหตุใดจึงมีการโหวตถึง 90+ รายการให้กับผู้ประกาศข่าวของ Mikel เพราะโซลูชันของเขาใช้ได้ผล ไม่จำเป็นต้องเปลี่ยนรีจิสทรีหากคุณสามารถเปลี่ยนหน้าเว็บได้
ฉันเห็นด้วยอย่างยิ่งกับโซลูชันที่ให้มา แต่ฉันคิดว่าการชี้แจงเล็กน้อยเป็นสิ่งสำคัญที่ฉันคิดว่าอาจจำเป็น
สำหรับแต่ละกระบวนการ (อ่านเพิ่มเติม: vshost.exe, yourWinformApplication.exe.svchost หรือชื่อ application.exe ของคุณ) ที่จะต้องเพิ่ม DWORD ด้วยค่าที่ให้ไว้ในกรณีของฉันฉันปล่อยให้ 9000 (เป็นทศนิยม) ในแอปพลิเคชัน ตั้งชื่อและเรียกใช้สคริปต์ได้อย่างราบรื่นและปราศจากข้อผิดพลาด
ข้อผิดพลาดที่พบบ่อยที่สุดคือการเชื่อว่าจำเป็นต้องเพิ่ม "contoso.exe" ตามที่เป็นอยู่และคิดว่ามันใช้ได้ทั้งหมด!
ใช่การควบคุมเว็บเบราว์เซอร์ใช้ IE เวอร์ชันใดก็ตามที่คุณติดตั้งไว้ ซึ่งหมายความว่าหากคุณเรียกใช้แอปพลิเคชันบนเครื่องที่มี IE 8 คุณลักษณะของ IE 9 ที่คุณต้องใช้จะไม่สามารถใช้งานได้
ฉันมาถึงวิธีแก้ปัญหานี้และมันไม่ได้ผลสำหรับฉัน! เนื่องจากฉันใช้ 64 บิตฉันจึงต้องเปลี่ยนรีจิสทรี:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
แทนที่จะเป็นเรื่องที่ทุกคนพูดถึง:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
ฉันชอบรหัส (C #) ต่อไปนี้ซึ่งกำหนดการตั้งค่ารีจิสทรีสำหรับแอปของคุณ ไม่แน่ใจว่าจะตัดหลังจากการติดตั้งหรือไม่แม้ว่าจะต้องมีการอนุญาต สำหรับฉันมันแก้ไขปัญหาเกี่ยวกับ WebSocket ไม่พร้อมใช้งานในตัวควบคุมเว็บเบราว์เซอร์ใน WPF
ฉันมีปัญหาเดียวกันและคำตอบของรีจิสทรีที่นี่ใช้ไม่ได้
ฉันมีการควบคุมเบราว์เซอร์ในโปรแกรมเวอร์ชันใหม่ที่ทำงานได้ดีบน XP ล้มเหลวใน Windows 7 (64 บิต) เวอร์ชันเก่าทำงานได้ทั้งบน XP และ Windows 7
หน้าเว็บที่แสดงในเบราว์เซอร์ใช้ปลั๊กอินแปลก ๆ เพื่อแสดงแผนที่ SVG แบบเก่า (ฉันคิดว่ามันเป็นแอพเพล็ต Java)
ปรากฎว่าปัญหาเกี่ยวข้องกับการป้องกัน DEP ใน Windows 7
dotnet 2 เวอร์ชันเก่าไม่ได้ตั้งค่าสถานะ DEP ที่ต้องการใน exe แต่ตั้งแต่ dotnet 2, SP 1 เป็นต้นไปทำได้ (ใช่พฤติกรรมการคอมไพล์และด้วยเหตุนี้พฤติกรรมรันไทม์ของ exe จึงเปลี่ยนไปขึ้นอยู่กับเครื่องที่คุณคอมไพล์ดี .. ).
มันเป็นเอกสารใน MSDN บล็อกNXCOMPAT และเรียบเรียง หากต้องการอ้างอิง: สิ่งนี้จะทำให้นักพัฒนาบางคนประหลาดใจอย่างไม่ต้องสงสัย ... ดาวน์โหลดชุดบริการเฟรมเวิร์กคอมไพล์ใหม่เรียกใช้แอปของคุณตอนนี้คุณได้รับข้อยกเว้น IP_ON_HEAP
การเพิ่มสิ่งต่อไปนี้ในการสร้างโพสต์ใน Visual Studio ปิด DEP สำหรับ exe และทุกอย่างทำงานตามที่คาดไว้:
all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
/headers
จะแสดงการตั้งค่า DEP บน exeเกี่ยวกับคำตอบที่ยอมรับของ whitehawk ฉันแค่พยายามเพิ่มประสบการณ์เล็กน้อย แค่พยายามเพิ่มความคิดเห็น แต่ SO บ่นว่ามันยาวเกินไป
โดยทั่วไปหากไม่ได้ติดตั้ง IE 9 สวิตช์รีจิสทรี FEATURE_BROWSER_EMULATION จะไม่ทำงานเลย
ตัวอย่างเช่นประสบการณ์ของฉันเองในวันนี้ฉันพยายามทำให้. net webcontrol ทำงานกับโหมด IE10 เนื่องจาก html หนึ่งตัวที่ฉันพยายามแสดงผลไม่สามารถใช้กับ. netControl ภายใต้ VS2012 ได้และไม่ทำงานด้วยซ้ำเมื่อฉันโหลด html ไปที่ IE8 โดยตรงยังคงแสดง css ไม่ถูกต้อง (แม้ว่าฉันจะบอกว่าอนุญาตเนื้อหาที่ถูกบล็อก) แต่ฉันได้ทดสอบ html เดียวกันกับ IE10 บนเครื่อง win 8 ของเพื่อนแล้ว นั่นเป็นเหตุผลที่ฉันพยายามตั้งค่า. net webControl เป็นโหมด IE 10 แต่ก็ล้มเหลว ...
ตอนนี้ฉันคิดว่านี่คือ bcos เครื่อง win 7 ของฉันมีการติดตั้ง IE8 เท่านั้นดังนั้นไม่ว่าฉันจะตั้งค่าเป็นสวิตช์ FEATURE_BROWSER_EMULATION (ค่าเป็น IE9, IE10 IE11) มันก็ไม่ทำงานเลย!
จากนั้นฉันดาวน์โหลดและติดตั้ง IE 10 บนเครื่อง win 7 ของฉัน ก็ยังใช้ไม่ได้ฉันจึงเพิ่ม FEATURE_BROWSER_EMULATION มันเริ่มทำงาน!
นอกจากนี้ฉันสังเกตว่าไม่ว่าฉันจะตั้งค่าใดแม้กระทั่งตั้งค่าเป็น 0 ตามค่าเริ่มต้น webControl ยังคงใช้โหมด IE 10 ซึ่งยังคงใช้งานได้สำหรับฉัน
สรุปได้ว่าหากคุณติดตั้ง IE X แต่คุณต้องการให้. Net webControl ของคุณทำงานภายใต้ IE (X + N) N> 0 modo สองสิ่งที่คุณต้องทำ:
ไปที่เว็บไซต์ MS และดาวน์โหลดและติดตั้ง IE (X + N) บนเครื่องของคุณคุณจะต้องรีบูตหลังการติดตั้ง
ใช้คำตอบของ whitehawk
โดยทั่วไป: ในการควบคุมค่าของคุณลักษณะนี้โดยใช้รีจิสทรีให้เพิ่มชื่อไฟล์ปฏิบัติการของคุณในการตั้งค่าต่อไปนี้และตั้งค่าให้ตรงกับการตั้งค่าที่ต้องการ
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_BROWSER_EMULATION
contoso.exe = (DWORD) 00009000
Windows Internet Explorer 8 และใหม่กว่า คุณลักษณะ FEATURE_BROWSER_EMULATION กำหนดโหมดจำลองเริ่มต้นสำหรับ Internet Explorer และสนับสนุนค่าต่อไปนี้
คำอธิบายค่า
11001 (0x2AF9 Internet Explorer 11 หน้าเว็บจะแสดงในโหมดขอบ IE11 โดยไม่คำนึงถึงคำสั่ง! DOCTYPE
11000 (0x2AF8) เช่น 11. หน้าเว็บที่มีคำสั่งตามมาตรฐาน! DOCTYPE จะแสดงในโหมดขอบ IE11 ค่าดีฟอลต์สำหรับ IE11
10001 (0x2711) Internet Explorer 10 หน้าเว็บจะแสดงในโหมดมาตรฐาน IE10 โดยไม่คำนึงถึงคำสั่ง! DOCTYPE
10,000 (0x02710) Internet Explorer 10 หน้าเว็บที่มีคำสั่งตามมาตรฐาน! DOCTYPE จะแสดงในโหมดมาตรฐาน IE10 ค่าดีฟอลต์สำหรับ Internet Explorer 10
9999 (0x270F) Windows Internet Explorer 9 หน้าเว็บจะแสดงในโหมดมาตรฐานของ IE9 โดยไม่คำนึงถึงคำสั่ง! DOCTYPE
9000 (0x2328) Internet Explorer 9 หน้าเว็บที่มีคำสั่งตามมาตรฐาน! DOCTYPE จะแสดงในโหมด IE9 ค่าเริ่มต้นสำหรับ Internet Explorer 9
สิ่งสำคัญใน Internet Explorer 10 หน้าเว็บที่มีคำสั่งตามมาตรฐาน! DOCTYPE จะแสดงในโหมดมาตรฐาน IE10
8888 (0x22B8) หน้าเว็บจะแสดงในโหมดมาตรฐานของ IE8 โดยไม่คำนึงถึงคำสั่ง! DOCTYPE
8000 (0x1F40) หน้าเว็บที่มีคำสั่ง DOCTYPE ตามมาตรฐานจะแสดงในโหมด IE8 ค่าเริ่มต้นสำหรับ Internet Explorer 8 สิ่งสำคัญใน Internet Explorer 10 หน้าเว็บที่มีคำสั่งตามมาตรฐาน! DOCTYPE จะแสดงในโหมดมาตรฐาน IE10
7000 (0x1B58) หน้าเว็บที่มีคำสั่งตามมาตรฐาน! DOCTYPE จะแสดงในโหมดมาตรฐาน IE7 ค่าดีฟอลต์สำหรับแอพพลิเคชั่นที่โฮสต์ WebBrowser Control
อ้างอิงแบบเต็มที่นี่
without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.
- นี่เป็นสิ่งที่ผิด ฉันติดตั้ง IE8 เท่านั้นและฉันสามารถใช้สวิตช์เพื่อทำให้เว็บเบราว์เซอร์เข้าสู่โหมดการแสดงผลต่างๆได้อย่างสมบูรณ์แบบ