[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]
WebBrowser
[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]Однако всегда возвращается нуль. Это связано с тем, что execScript Metod возвращается только признак успешного выполнения.[/COLOR]
[COLOR=black]Как в моем случае получить значение переменной max из скрипта в программу?[/COLOR]
В Out-е, я полагаю
Цитата: Phodopus
В Out-е, я полагаю
Нет в нем никакой пользы. Проверила в точке останова, в Out нет реального значения. Метод всегда должен возвращать VT_EMPTY. Надо как-то через это http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1438287&SiteID=1
Цитата: 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();
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 объекта. Тогда можно обращаться к методам/свойствам прямо из скрипта.
Большое спасибо!
Цитата: lena_ki
Большое спасибо!
т.е. значение - max получила:)
Цитата: GIZMO
т.е. значение - max получила:)
Да. :)