Аннотация:
При использовании WebBrowser Вы можете вызывать любые скрипты, расположенные в теле html-страницы. Обращение к скриптам производится через диспетчерский интерфейс, возвращаемый в свойстве Script интерфейса IHTMLDocument.
--
Как мы живем государственная тайна, на что — коммерческая, с кем — личная.
Я попытался сделать следующее: я запускал параллельный поток и пытался, имея указатель на View, запустить скрипт, от чего приложение вешалось. Как с єтим бороться?
Если загружаю(Navigate();) простой HTML документ(обычная страничка состоящая из одного .html файла), то все работает.
Если же составной документ(с фреймами, к примеру main.html , leftpart.html , rightpart.html и Navigate("main.html", ...); ), то где бы я ни определял script evaluate — не работает.
Когда прокручиваю в дебагере то
вылетает на втором if (отмечено --->)
code — String (BSTR) that specifies the script code to execute.
language — String (BSTR) that specifies the language in which the code is executed. The default is Microsoft® JScript® (compatible with ECMA 262 language specification).
pvarRet — Address of a VARIANT structure that receives the return value from the script code.
использовать не CoInitialize, а CoInitializeEx(COINIT_MULTITHREADED).
По умолчанию VC вставляет CoInitialize, а эта функция инициализирует COM только в одном потоке
Скрипт может находится в любом фрейме. При этом надо обращаться к
соответствующему документу. Каждому фрейму соответсвует свой документ.
Список фреймов текущего документа можно получить через вызов get_frames
Здравствуйте, DNS, Вы писали:
DNS>А у интерфейса IHTMLWindow2 есть такой метод execScript. IHTMLWindow2 можно получить у IHTMLDocument2 вызовом get_parentWindow.
DNS>MSDN: DNS>///////// DNS>HRESULT execScript( DNS> BSTR code, DNS> BSTR language, DNS> VARIANT *pvarRet DNS>);
DNS>language — String (BSTR) that specifies the language in which the code is executed. The default is Microsoft® JScript® (compatible with ECMA 262 language specification).
Нужно вызвать JavaScript (скрипт в html странице), какую строку надо передать во 2-м параметре?
пока что имею в качестве HRESULT 0x80070057 (Invlid Parameter).
ТЧ>Авторы: ТЧ> Тимофей Чадов
ТЧ>Аннотация: ТЧ>При использовании WebBrowser Вы можете вызывать любые скрипты, расположенные в теле html-страницы. Обращение к скриптам производится через диспетчерский интерфейс, возвращаемый в свойстве Script интерфейса IHTMLDocument.
----------------------------------------
А вообще скрипт можно вызвать по средствам ActiveX контрола — Microsoft Script Control,
На С# делается минут в 10, на С++ не знаю, работать с ним достаточно леко, можно передовать
свои обьекты для работы с ними в скрипте.
Re: А как вообще отключить JavaScript и Cookies программно?
Хочу дополнить — есть вариант чуть (слегка) ускорить этот процесс если функция будет вызываться более одного раза.
Для этого после получения DISPID делаем сначала DISPATCH_GET — получаем в ответ VARIANT, в котором лежит IDispatch. Так вот, этот диспатч и будет "указателем на функцию в понимании JScript". А для вызова функции по указателю делаем опять же Invoke, которому в качестве DISPID передаём DISPID_VALUE.