본문 바로가기

C/C++

[MFC] CWebBrowser2 내장 IE 브라우저 이슈


MFC의 내장 IE 브라우저 사용하기

https://msdn.microsoft.com/ko-kr/library/aa752046%28v=vs.85%29.aspx

 

위 내용을 따라서 해보면, MFC에서 대충 'CWebBrowser2' 이런 클래스를 만들어 준다.

 

그런데, 문제가 좀 많다.

이 내장 브라우저 버전이 '7.0' 이다. (xp에서는 6.0)

그렇게 때문에 다음의 자바스크립트에서 오류가 많이 발생한다. jQuery에서도..




일단 아래 링크와 같은 방법을 찾았으며, 혹시 링크가 깨지는 상황이 올까봐 간략 정리한다.

https://indidev.net/forum/viewtopic.php?f=4&t=414


(참고로 xp에서는 아무 방법도 안된다. xp에서 테스트하는 내가 이상한거지..)



1. 에러 우회하기

msdn.microsoft.com/en-us/library/aa768269(v=vs.85).aspx

silent 모드를 활성화 한다.

> m_browser.SetSilent(TRUE);



2. 브라우저 에뮬레이션 모드 세팅하기

https://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx#browser_emulation

 

레지스트리의 'FEATURE_BROWSER_EMULATION' 값을 찾아가 자신의 프로그램(MyApp.exe)를 등록한다.

세팅 값은 위 링크를 따라가서 확인한다.

이 키 값은 아래의 위치에서 확인하며, 둘 중 자신에게 맞는 위치에 등록한다.

> HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

> HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

 

3. 헤더에 user agent 세팅하기

아래와 같이 코딩해 준다.


CString userAgent;

userAgent = _T("User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/7.0");

CComVariant headers(userAgent.IsEmpty() ? NULL : (LPCTSTR)userAgent);

m_browser.Navigate(m_url, NULL, NULL, NULL, &headers);

 


Windows 7 : UserAgent는 변경이 되는데, 여전히 에러가 발생한다.

 


결국... 위의 방법대로 하면 UserAgent는 변경이 되나, 그냥 IE7처럼 동작 하는 듯.


*이 외에도 여러가지 이슈가 있으며,

필요할때마다 정리할 것.