WebBrowser & Script Engine
От: Египко Николай Владимирович Германия www.nikeware.com
Дата: 09.07.02 10:21
Оценка:
Привет Алл!

Имеется приложение на Visual С++ (MFC), которое работает как "хост" для Web-контрола (IDocHostUIHandler, IDocHostShowUI и тому подобные).

Возможно ли добавить для HTML страницы возможность "видеть" дополнительные (собственные) глобальные переменые (в виде Дисп-интерфейсов естественно), которые можно потом использовать в обычном скрипте страницы по своему усмотрению (т.е. вызывать их методы, свойства и т.п.)?

Проблема в том, что все это пока делается через метод GetExternal() интерфейса IDocHostUIHandler, что не совсем удобно, так как приходится все объекты запрашивать через корневой посредством вызова на HTML-странице метода external. Хотелось бы всех их проименовать и писать например сразу: MyApplication.SomeFunction() — где Application мой дисп-интерфейс.

Знаю, что все это определяется посредством ScriptingEngine-объекта и его интерфейсов IActiveScript, IActiveScriptParse. Есть также метод IActiveScript->AddNamedItem(), который собственно и создает это глобальное определение.

Вопрос как это все связать вместе и возможно ли?

Regards,
Egipko Nikolay
Re: WebBrowser & Script Engine
От: TepMuHyc  
Дата: 09.07.02 10:37
Оценка:
Здравствуйте Египко Николай Владимирович, Вы писали:

ЕНВ>Возможно ли добавить для HTML страницы возможность "видеть" дополнительные (собственные) глобальные переменые (в виде Дисп-интерфейсов естественно), которые можно потом использовать в обычном скрипте страницы по своему усмотрению (т.е. вызывать их методы, свойства и т.п.)?


Глобальные — это врядли (по крайней мере я не знаю возможно ли это сделать)
А вот доступ вообще — без проблем — реализуй IDocHostUIHandler::GetExternal и ты получишь доступ к твоему диспинтерфейсу через "window.external"
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
Re[2]: WebBrowser & Script Engine
От: Nikolaz Германия www.nikeware.com
Дата: 09.07.02 11:17
Оценка:
Здравствуйте TepMuHyc, Вы писали:


TMH>Глобальные — это врядли (по крайней мере я не знаю возможно ли это сделать)

TMH>А вот доступ вообще — без проблем — реализуй IDocHostUIHandler::GetExternal и ты получишь доступ к твоему диспинтерфейсу через "window.external"

Так и сделано. Просто неудобно постоянно писать window.external.MyObject.GetSomeData().

Формально нужно:
1. где-то запросить указатель на интерфейс IActiveScript (пробовал у IWebBrowser2 — результат NULL) и вызвать AddNamedItem("MyGlobalName");
2. Заставить кого-то (пока не знаю) запросить у моего хоста требуемый дисп-интерфейс по имени MyGlobalName;

Вопрос в том КТО дергает мой IDocHostUIHandler::GetExternal()?
Re[3]: WebBrowser & Script Engine
От: Slayer Россия  
Дата: 10.07.02 02:09
Оценка: 10 (1)
N>Так и сделано. Просто неудобно постоянно писать window.external.MyObject.GetSomeData().

Возможно я чего-то не погимаю, но почему нельзя завести такую переменную ?
var MyObj=window.external;
//А потом соответственно использовать:
MyObj.MyMethod();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.