Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

WebBrowser

343
05 сентября 2008 года
lena_ki
282 / / 14.04.2005
[FONT=Calibri][SIZE=3]В скрипте, который находиться на сервере есть код:[/SIZE][/FONT]
[SIZE=3][FONT=Calibri]//фрагмент кода:[/FONT][/SIZE]
[SIZE=3][FONT=Calibri]var max;[/FONT][/SIZE]
[SIZE=3][FONT=Calibri]function PolyLineLength() [/FONT][/SIZE]
[SIZE=3][FONT=Calibri]{[/FONT][/SIZE]
[SIZE=3][FONT=Calibri]max = encodedPolyline.getLength(); [/FONT][/SIZE]
[SIZE=3][FONT=Calibri]return max;[/FONT][/SIZE]
[SIZE=3][FONT=Calibri]}[/FONT][/SIZE]
[FONT=Calibri][SIZE=3]Переменная max получает значение. Это можно проверить, добавив в код строку [/SIZE][/FONT][COLOR=black]alert(max).[/COLOR]

[COLOR=black]У меня возникает вопрос: как получить это значение в клиентском приложении?[/COLOR]
[COLOR=black]Из клиента делаю сейчас такой вызов:[/COLOR]
 
Код:
[COLOR=black][COLOR=black]CComPtr<IHTMLDocument2>spDoc2;[/COLOR]
[COLOR=black]CComPtr<IHTMLWindow2>spWnd;[/COLOR]
[COLOR=black]WebBrowser2->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*) &spDoc2);[/COLOR]
[COLOR=black]spDoc2->get_parentWindow(&spWnd);[/COLOR]
[COLOR=black]VARIANT Out;[/COLOR]
[COLOR=black]double max = spWnd->execScript( WideString("PolyLineLength()"),WideString("javascript"), &Out);[/COLOR]
[COLOR=black]Label1->Caption = FloatToStr(max);[/COLOR]
[/COLOR]


[COLOR=black]Однако всегда возвращается нуль. Это связано с тем, что execScript Metod возвращается только признак успешного выполнения.[/COLOR]

[COLOR=black]Как в моем случае получить значение переменной max из скрипта в программу?[/COLOR]
14
05 сентября 2008 года
Phodopus
3.3K / / 19.06.2008
В Out-е, я полагаю
343
05 сентября 2008 года
lena_ki
282 / / 14.04.2005
Цитата: Phodopus
В Out-е, я полагаю



Нет в нем никакой пользы. Проверила в точке останова, в Out нет реального значения. Метод всегда должен возвращать VT_EMPTY. Надо как-то через это http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1438287&SiteID=1

246
05 сентября 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: lena_ki
Нет в нем никакой пользы. Проверила в точке останова, в Out нет реального значения. Метод всегда должен возвращать VT_EMPTY. Надо как-то через это http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1438287&SiteID=1



Код:
LPDISPATCH document = 0;
    wbBrowser->ControlInterface->get_Document(&document);
    IHTMLDocument* htmlDocument = 0;
    HRESULT hr = document->QueryInterface(IID_IHTMLDocument,
(void**)&htmlDocument);
    if (SUCCEEDED(hr)) {
        DISPID ID = 0;
        OLECHAR FAR* Name = L"PolyLineLength";
        LPDISPATCH script = 0;
        htmlDocument->get_Script(&script);
        hr = script->GetIDsOfNames(IID_NULL, &Name, 1,
LOCALE_SYSTEM_DEFAULT, &ID);
        if (SUCCEEDED(hr)) {
            DISPPARAMS noArgs = {NULL, NULL, 0, 0};
TVariant Result;
            hr = script->Invoke(saveID, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD, &noArgs, (void*)&Result, NULL, NULL);
        }
        script->Release();
        htmlDocument->Release();
    }
    document->Release();

типа так, проверить не могу, сейчас Билдера нет на компе. Можно еще расширить стандартную объектную модель документа IWebBrowser, добавляя в нее собственные методы и свойства. Для этого нужно реализовать интерфейс IDocHostUIHandler, в методе GetExternal которого возвращать указатель на IDispatch объекта. Тогда можно обращаться к методам/свойствам прямо из скрипта.
343
06 сентября 2008 года
lena_ki
282 / / 14.04.2005
Большое спасибо!
246
06 сентября 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: lena_ki
Большое спасибо!


т.е. значение - max получила:)

343
07 сентября 2008 года
lena_ki
282 / / 14.04.2005
Цитата: GIZMO
т.е. значение - max получила:)



Да. :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог