Сообщений 14    Оценка 0        Оценить  
Система Orphus

Как вызвать скрипт из приложения?

Автор: Тимофей Чадов
Опубликовано: 7.09.2001
Исправлено: 13.03.2005
Версия текста: 1.0

При использовании WebBrowser Вы можете вызывать любые скрипты, расположенные в теле html-страницы. Обращение к скриптам производится через диспетчерский интерфейс, возвращаемый в свойстве Script интерфейса IHTMLDocument.

В следующем примере демонстрируется вызов функции с именем evalute, которая определена в теле html-страницы следующим образом.

<SCRIPT>
function evaluate(x)
{
    alert(x +"= " + eval(x));
}
</SCRIPT>
// Эта функция выполняет скрипт
void CMyHtmlView::OnCallscript() 
{        
    HRESULT hr;
    LPDISPATCH pDispatch = GetHtmlDocument();        
    if( pDispatch == NULL ) return; 
        
    IHTMLDocument* pHtmlDoc;
    hr = pDispatch->QueryInterface( __uuidof( IHTMLDocument ), (void**)&pHtmlDoc );

    LPDISPATCH pScript;    
    pHtmlDoc->get_Script( &pScript);
    pScript->AddRef();
    if (SUCCEEDED(hr))
    {
        // Получаем DISPID интересуемой функции
        OLECHAR* szMember = L"evaluate";
        DISPID dispid;

        HRESULT hr = pScript->GetIDsOfNames(IID_NULL, &szMember, 1,
            LOCALE_SYSTEM_DEFAULT, &dispid);

        if (SUCCEEDED(hr))
        {
            // Выполняем
            COleVariant vtResult;
            static BYTE parms[] = VTS_BSTR;

            COleDispatchDriver dispDriver(pScript);        
            dispDriver.InvokeHelper(dispid, DISPATCH_METHOD, VT_VARIANT,
                (void*)&vtResult, parms,   
                "5+Math.sin(9)");
        }
    }
    pScript->Realease(); 
    pHtmlDoc->Release();
    pDispatch->Release();
}

Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 14    Оценка 0        Оценить