IHTMLWindow2::execScript
От: corda  
Дата: 01.08.05 11:31
Оценка:
Здравствуйте!
Я пытаюсь вызвать 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, а второе с потоками.
Помогите, пожалуйста, разобраться.
Re: IHTMLWindow2::execScript
От: TK Лес кывт.рф
Дата: 01.08.05 12:01
Оценка: 3 (1)
Hello, "corda"
> В результате получаю две проблемы. Во-первых, после закрытия окна броузера
> или при перегрузке страницы выскакивает "An error occurred in Internet
> Explorer" и IE закрывается. Во-вторых, яваскрипт вызывается только если я
> разкомментрую строчку с MessageBox
1. pClientSite не проверяется на NULL (перезагрузка страницы и т.п.)
2. Вызов MessageBox приводит к запуску очереди выборки сообщений и, IE может
получить доп. возможность для завершения инициализации страницы.
Posted via RSDN NNTP Server 2.0 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: IHTMLWindow2::execScript
От: corda  
Дата: 01.08.05 15:35
Оценка:
Здравствуйте, TK, Вы писали:

TK>Hello, "corda"

>> В результате получаю две проблемы. Во-первых, после закрытия окна броузера
>> или при перегрузке страницы выскакивает "An error occurred in Internet
>> Explorer" и IE закрывается. Во-вторых, яваскрипт вызывается только если я
>> разкомментрую строчку с MessageBox
TK>1. pClientSite не проверяется на NULL (перезагрузка страницы и т.п.)
TK>2. Вызов MessageBox приводит к запуску очереди выборки сообщений и, IE может
TK>получить доп. возможность для завершения инициализации страницы

Спасибо за ответ!
С первой проблемой все понятно. А вот по поводу второй можно по-подробней?
Re[3]: IHTMLWindow2::execScript
От: TK Лес кывт.рф
Дата: 01.08.05 16:20
Оценка:
Hello, "corda"
> С первой проблемой все понятно. А вот по поводу второй можно по-подробней?

Подожди чуть-чуть с вызовом скрипта. Например, можно подписаться на
HTMLWindowEvents::onload и, вызывать скрипт там.
Posted via RSDN NNTP Server 2.0 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: IHTMLWindow2::execScript
От: corda  
Дата: 01.08.05 23:25
Оценка:
Здравствуйте, TK, Вы писали:

TK>Подожди чуть-чуть с вызовом скрипта. Например, можно подписаться на

TK>HTMLWindowEvents::onload и, вызывать скрипт там

Повесил вызов скрипта на нажатие кнопки (кликаю, естественно, далеко не сразу),
но все равно отрабатывает только после MessageBox'а.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.