Здравствуйте!
Я пытаюсь вызвать JavaScript-метод из ActiveX'а. Реализую SetClientSite (на BCB 5):
STDMETHODIMP TActiveFormXImpl::SetClientSite( IOleClientSite* pClientSite )
{
IOleContainer* pContainer = NULL;
IHTMLDocument2* pDoc = NULL;
IHTMLWindow2 *pWindow = NULL;
pClientSite->GetContainer( &pContainer );
if (pContainer != NULL) {
pContainer->QueryInterface( IID_IHTMLDocument2, ( LPVOID* ) & pDoc );
if (pDoc != NULL) {
pDoc->get_parentWindow(&pWindow);
if (pWindow != NULL) {
//MessageBox(NULL, "test", "test", 0);
VARIANT v;
VariantInit(&v);
pWindow->execScript(L"test(1);", L"javascript", &v);
VariantClear(&v);
pWindow->Release();
}
pDoc->Release();
}
pContainer->Release();
}
return ParentIOleObjectImpl::SetClientSite(pClientSite);
}
В результате получаю две проблемы. Во-первых, после закрытия окна броузера или при перегрузке страницы выскакивает "An error occurred in Internet Explorer" и IE закрывается. Во-вторых, яваскрипт вызывается только если я разкомментрую строчку с MessageBox
Своих знаний (пока) хватает только на то, чтобы предположить, что первое связано с pContainer, а второе с потоками.
Помогите, пожалуйста, разобраться.
Hello, "corda"
> В результате получаю две проблемы. Во-первых, после закрытия окна броузера
> или при перегрузке страницы выскакивает "An error occurred in Internet
> Explorer" и IE закрывается. Во-вторых, яваскрипт вызывается только если я
> разкомментрую строчку с MessageBox 
1. pClientSite не проверяется на NULL (перезагрузка страницы и т.п.)
2. Вызов MessageBox приводит к запуску очереди выборки сообщений и, IE может
получить доп. возможность для завершения инициализации страницы.
Posted via RSDN NNTP Server 2.0 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Hello, "corda"
>> В результате получаю две проблемы. Во-первых, после закрытия окна броузера
>> или при перегрузке страницы выскакивает "An error occurred in Internet
>> Explorer" и IE закрывается. Во-вторых, яваскрипт вызывается только если я
>> разкомментрую строчку с MessageBox
TK>1. pClientSite не проверяется на NULL (перезагрузка страницы и т.п.)
TK>2. Вызов MessageBox приводит к запуску очереди выборки сообщений и, IE может
TK>получить доп. возможность для завершения инициализации страницы
Спасибо за ответ!
С первой проблемой все понятно. А вот по поводу второй можно по-подробней?
Hello, "corda"
> С первой проблемой все понятно. А вот по поводу второй можно по-подробней?
Подожди чуть-чуть с вызовом скрипта. Например, можно подписаться на
HTMLWindowEvents::onload и, вызывать скрипт там.
Posted via RSDN NNTP Server 2.0 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.