최근에 IE9- 베타로 업그레이드했습니다. 이제 .Net (3.5) WinForm 응용 프로그램에서 WebBrowser
컨트롤 을 사용하고 싶습니다 .
그래서 내 질문은 WebBrowser
컨트롤이 IE9의 모든 속성과 기능을 표시 하는지 여부 입니다.
내 관심사는 SVG 그래픽을 렌더링하고 싶다는 것입니다.
답변:
IE8 버전과 마찬가지로 WebBrowser 컨트롤의 IE9 "버전"은 실제로 하나에 여러 브라우저가 있습니다. IE8 버전과는 달리 doctype을 변경하여 페이지 내 렌더링 모드를 좀 더 제어 할 수 있습니다. 물론 브라우저 모드를 변경하려면 이전 답변과 같이 레지스트리를 설정해야합니다. 다음은 FEATURE_BROWSER_EMULATION에 대한 reg 파일 조각입니다.
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
.
WebBrowser 컨트롤은 설치 한 IE 버전을 사용하지만 호환성을 위해 기본적으로 페이지를 IE7 표준 모드로 렌더링합니다.
새로운 IE9 기능을 활용하려면 HTML 페이지의 태그 <meta http-equiv="X-UA-Compatible" content="IE=9" >
안에 메타 태그를 추가해야합니다 <head>
.
이 메타 태그는 CSS, JavaScript 파일 등에 대한 링크 앞에 추가되어야 <head>
제대로 작동합니다 (다른 <meta>
태그 또는 태그 만 <title>
앞에 올 수 있음).
다른 방법은 다음에 레지스트리 항목을 추가하는 것입니다.
HKLM> 소프트웨어> Microsoft> Internet Explorer> 기본> FeatureControl> FEATURE_BROWSER_EMULATION
그리고 거기에 값이 '9000'인 'myApplicationName.exe'를 추가하여 WebBrowser 컨트롤이 IE9 모드에서 페이지를 표시하도록합니다. 다른 값도 사용할 수 있지만 이 문서는 어떤 값을 사용하든 IE 8 모드에서 렌더링 할 페이지를 얻을 수 없기 때문에 완전히 정확하지는 않습니다.
HKLM 대신 HKCU의 동일한 경로에 레지스트리 키를 추가하는 것도 작동합니다. HKLM에 기록하려면 HKCU와 달리 관리자 권한이 필요하기 때문에 유용합니다.
내가 이것을 찾았다는 다행이다. 다음은 매우 중요합니다.
<meta http-equiv="X-UA-Compatible" content="IE=9" >
이것이 없으면 내가 생성 한 보고서 중 어느 것도 IE8에서 훌륭하게 작동 했음에도 불구하고 IE9 설치 후에 작동하지 않을 것입니다. 웹 브라우저 컨트롤에 제대로 표시되지만 .Print ()를 호출하면 문자가 누락되거나 공백이 튀어 나옵니다. 모자이크에서도 렌더링 할 수있는 기본적인 HTML 일뿐입니다. heh IE7 호환 모드가 왜 망가 졌는지 잘 모르겠습니다. 특히 같은 페이지를 5 번 .Print () 할 수 있고 매번 다른 문자가 누락되도록 할 수 있습니다. 그것은 심지어 PDF 출력으로 이어질 것이므로 확실히 브라우저입니다.
완전하게 ...
32 비트 OS의 경우 다음에 레지스트리 항목을 추가해야합니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
*******또는*******
64 비트 OS의 경우 다음 위치에 레지스트리 항목을 추가해야합니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
이 항목은 DWORD
Webbrowser 컨트롤을 호스팅하는 실행 파일의 이름 인 이어야합니다 . 즉 :
myappname.exe (MSDN 웹 페이지에서와 같이 "Contoso.exe"를 사용하지 마십시오. 단지 자리 표시 자 이름 일뿐입니다)
그런 다음 다음 DWORD
표에 따라 값을 지정하십시오.
http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation
DEFAULT 값이 아니기 때문에 10 진수 11001 또는 0x2AF9 hex --- (IE 11 EMULATION)로 변경했습니다 (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" >
헤더에 포함되어 있으면 webBrowser는 최신 IE 모드로로드됩니다. 왜 mikel의 답변에 90 개 이상의 찬성표가 있습니까? 그의 솔루션이 작동하기 때문입니다. 웹 페이지를 변경할 수 있으면 레지스트리를 변경할 필요가 없습니다.
예, WebBrowser 컨트롤은 설치된 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 #) 코드가 마음에 들었습니다. 권한이 필요한 경우 설치 후 잘 릴지 확실하지 않습니다. 저에게는 WPF의 WebBrowser 컨트롤 내에서 WebSocket을 사용할 수없는 문제가 해결되었습니다.
나는 같은 문제가 있었고 여기의 레지스트리 답변이 작동하지 않았습니다.
XP에서 잘 작동하고 Windows 7 (64 비트)에서는 실패한 새 버전의 프로그램에서 브라우저 컨트롤을 사용했습니다. 이전 버전은 XP와 Windows 7에서 모두 작동했습니다.
브라우저에 표시된 웹 페이지는 오래된 SVG 맵을 표시하기 위해 이상한 플러그인을 사용합니다 (Java 애플릿이라고 생각합니다).
문제는 Windows 7의 DEP 보호와 관련이 있습니다.
이전 버전의 dotnet 2는 exe에서 DEP 필수 플래그를 설정하지 않았지만 dotnet 2, SP 1부터 설정했습니다 (예, 컴파일 동작 및 따라서 exe의 런타임 동작은 컴파일 한 컴퓨터에 따라 변경되었습니다. ..).
MSDN 블로그 NXCOMPAT 및 C # 컴파일러 에 문서화되어 있습니다. 인용 : 의심 할 여지없이 몇몇 개발자는 놀라게 할 것입니다. 프레임 워크 서비스 팩을 다운로드하고, 다시 컴파일하고, 앱을 실행하면 이제 IP_ON_HEAP 예외가 발생합니다.
Visual Studio의 포스트 빌드에 다음을 추가하면 exe에 대한 DEP가 해제되고 모든 것이 예상대로 작동합니다.
all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
/headers
은 exe에 DEP 설정을 표시합니다.화이트 호크의 대답에 대해. 나는 경험에 약간의 실습을 추가하려고 노력하고 있습니다. 댓글을 추가하려고했지만 너무 길다고 불평합니다.
기본적으로 IE 9를 설치하지 않으면 레지스트리 스위치 FEATURE_BROWSER_EMULATION이 전혀 작동하지 않습니다.
예를 들어, 오늘 내 자신의 경험은 .net webcontrol이 IE10 모드에서 작동하도록하려고했습니다. 왜냐하면 렌더링하려는 하나의 html이 VS2012에서 .netControl에서 작동하지 않고 html을 IE8로로드 할 때도 작동하지 않기 때문입니다. 직접적으로 여전히 CSS가 제대로 렌더링되지 않습니다 (차단 된 콘텐츠 허용이라고 말한 후에도). 그러나 친구의 win 8 시스템에서 IE10으로 동일한 html을 테스트했습니다. 그래서 .net webControl을 IE 10 모드로 설정하려고하는데 계속 실패합니다.
이제 나는 이것이 bcos라고 생각했습니다. 내 win 7 컴퓨터에는 IE8 만 설치되어 있으므로 FEATURE_BROWSER_EMULATION 스위치 (IE9, IE10 IE11 값)에 설정 한 값에 관계없이 전혀 작동하지 않습니다!
그런 다음 Win 7 컴퓨터에 IE 10을 다운로드하여 설치했습니다. 여전히 작동하지 않고 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.! DOCTYPE 지시문에 관계없이 웹 페이지가 IE11 edge 모드로 표시됩니다.
11000 (0x2AF8) IE11. 표준 기반! DOCTYPE 지시문이 포함 된 웹 페이지는 IE11 edge 모드로 표시됩니다. IE11의 기본값입니다.
10001 (0x2711) Internet Explorer 10. 웹 페이지는! DOCTYPE 지시문에 관계없이 IE10 표준 모드로 표시됩니다.
10000 (0x02710) Internet Explorer 10. 표준 기반! DOCTYPE 지시문이 포함 된 웹 페이지는 IE10 표준 모드로 표시됩니다. Internet Explorer 10의 기본값입니다.
9999 (0x270F) Windows Internet Explorer 9. 웹 페이지는! DOCTYPE 지시문에 관계없이 IE9 표준 모드로 표시됩니다.
9000 (0x2328) Internet Explorer 9. 표준 기반! DOCTYPE 지시문이 포함 된 웹 페이지는 IE9 모드로 표시됩니다. Internet Explorer 9의 기본값입니다.
중요 Internet Explorer 10에서 표준 기반! DOCTYPE 지시문이 포함 된 웹 페이지는 IE10 표준 모드로 표시됩니다.
8888 (0x22B8) 웹 페이지는! DOCTYPE 지시문에 관계없이 IE8 표준 모드로 표시됩니다.
표준 기반! DOCTYPE 지시문이 포함 된 8000 (0x1F40) 웹 페이지는 IE8 모드로 표시됩니다. Internet Explorer 8의 기본값 중요 Internet Explorer 10에서 표준 기반! DOCTYPE 지시문이 포함 된 웹 페이지는 IE10 표준 모드로 표시됩니다.
표준 기반! DOCTYPE 지시문이 포함 된 7000 (0x1B58) 웹 페이지는 IE7 표준 모드로 표시됩니다. WebBrowser 컨트롤을 호스팅하는 응용 프로그램의 기본값입니다.
여기에 전체 참조
without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.
-이건 틀렸어. IE8 만 설치되어 있고 스위치를 완벽하게 사용하여 웹 브라우저를 다른 렌더링 모드로 전환 할 수 있습니다.