C++ - IWebBrowser2 - Javascript не активирован
Я тестировал код проекта с веб-сайта code project.com ( https://www.code project.com/Articles/3365/Embed-an-HTML-control-in-your-own-window-using-pla)
Это часть кода:
long EmbedBrowserObject(HWND hwnd)
{
IOleObject *browserObject;
IWebBrowser2 *webBrowser2;
RECT rect;
char *ptr;
IOleInPlaceFrameEx *iOleInPlaceFrameEx;
_IOleClientSiteEx *_iOleClientSiteEx;
if (!(ptr = (char *)GlobalAlloc(GMEM_FIXED, sizeof(IOleInPlaceFrameEx) + sizeof(_IOleClientSiteEx) + sizeof(IOleObject *))))
return(-1);
iOleInPlaceFrameEx = (IOleInPlaceFrameEx *)(ptr + sizeof(IOleObject *));
iOleInPlaceFrameEx->frame.lpVtbl = &MyIOleInPlaceFrameTable;
iOleInPlaceFrameEx->window = hwnd;
_iOleClientSiteEx = (_IOleClientSiteEx *)(ptr + sizeof(IOleInPlaceFrameEx) + sizeof(IOleObject *));
_iOleClientSiteEx->client.lpVtbl = &MyIOleClientSiteTable;
_iOleClientSiteEx->inplace.inplace.lpVtbl = &MyIOleInPlaceSiteTable;
_iOleClientSiteEx->inplace.frame = iOleInPlaceFrameEx;
if (!OleCreate(&CLSID_WebBrowser, &IID_IOleObject, OLERENDER_DRAW, 0, (IOleClientSite *)_iOleClientSiteEx, &MyIStorage, (void**)&browserObject))
{
*((IOleObject **)ptr) = browserObject;
SetWindowLong(hwnd, GWL_USERDATA, (LONG)ptr);
browserObject->lpVtbl->SetHostNames(browserObject, L"My Host Name", 0);
GetClientRect(hwnd, &rect);
if (!OleSetContainedObject((struct IUnknown *)browserObject, TRUE) && !browserObject->lpVtbl->DoVerb(browserObject, OLEIVERB_SHOW, NULL, (IOleClientSite *)_iOleClientSiteEx, -1, hwnd, &rect) && !browserObject->lpVtbl->QueryInterface(browserObject, &IID_IWebBrowser2, (void**)&webBrowser2))
{
webBrowser2->lpVtbl->put_Left(webBrowser2, 0);
webBrowser2->lpVtbl->put_Top(webBrowser2, 0);
webBrowser2->lpVtbl->put_Width(webBrowser2, rect.right);
webBrowser2->lpVtbl->put_Height(webBrowser2, rect.bottom);
webBrowser2->lpVtbl->Release(webBrowser2);
return(0);
}
UnEmbedBrowserObject(hwnd);
return(-3);
}
GlobalFree(ptr);
return(-2);
}
А также:
long DisplayHTMLPage(HWND hwnd, LPTSTR webPageName)
{
IWebBrowser2 *webBrowser2;
VARIANT myURL;
IOleObject *browserObject;
browserObject = *((IOleObject **)GetWindowLong(hwnd, GWL_USERDATA));
if (!browserObject->lpVtbl->QueryInterface(browserObject, &IID_IWebBrowser2, (void**)&webBrowser2))
{
VariantInit(&myURL);
myURL.vt = VT_BSTR;
size_t convertedChars = 0;
wchar_t wcstring[50];
mbstowcs_s(&convertedChars, wcstring, 50, webPageName, _TRUNCATE);
myURL.bstrVal = SysAllocString(wcstring);
if (!myURL.bstrVal)
{
badalloc: webBrowser2->lpVtbl->Release(webBrowser2);
return(-6);
}
webBrowser2->lpVtbl->Navigate2(webBrowser2, &myURL, 0, 0, 0, 0);
VariantClear(&myURL);
webBrowser2->lpVtbl->Release(webBrowser2);
return(0);
}
return(-5);
}
Когда я запускаю их код, у меня не возникает проблем с работой сайта без Javascript. Но теперь, если я открываю сайт с использованием Javascript, я получаю много ошибок на экране.
Как я могу решить это?
Спасибо
2 ответа
Я добавил следующую инструкцию в мой HTML:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Оно работает.
Убедитесь, что ваш встроенный веб-браузер работает в самой высокой версии IE.
HKEY_CURRENT_USER \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION
https://weblog.west-wind.com/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version