window.external
От: Spiceman  
Дата: 12.04.04 10:00
Оценка:
Я создал форму и разместил на ней компонент WebBrowser. Затем создал страницу на HTML. Я хочу написать свою функцию в приложении, например, qqq() такую, чтобы она вызывалась со страницы так: window.external.qqq. Можете мне популярно объяснить, что я должен делать? А то я не слишком силен в COM и тем более в .NET, а прогу надо обязательно на C# написать.

12.04.04 15:22: Перенесено модератором из '.NET' — AVK
Re: window.external
От: TK Лес кывт.рф
Дата: 12.04.04 10:13
Оценка:
Здравствуйте, Spiceman, Вы писали:

S>Я создал форму и разместил на ней компонент WebBrowser. Затем создал страницу на HTML. Я хочу написать свою функцию в приложении, например, qqq() такую, чтобы она вызывалась со страницы так: null; о объяснить, что я должен делать? А то я не слишком силен в COM и тем более в .NET, а прогу надо обязательно на C# написать.


Без COM тут по любому не обойтись.
От браузера нужно запрашивать ICustomDoc и передать ему реализацию IDocHostUIHandler (описание в MSDN). Проще всего это делать на MC++, или описать эти интерфейсы на C#.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: window.external
От: Spiceman  
Дата: 12.04.04 20:15
Оценка:
Здравствуйте, TK, Вы писали:

TK>Здравствуйте, Spiceman, Вы писали:


S>>Я создал форму и разместил на ней компонент WebBrowser. Затем создал страницу на HTML. Я хочу написать свою функцию в приложении, например, qqq() такую, чтобы она вызывалась со страницы так: null; о объяснить, что я должен делать? А то я не слишком силен в COM и тем более в .NET, а прогу надо обязательно на C# написать.


TK>Без COM тут по любому не обойтись.

TK>От браузера нужно запрашивать ICustomDoc и передать ему реализацию IDocHostUIHandler (описание в MSDN). Проще всего это делать на MC++, или описать эти интерфейсы на C#.

Я полазил по просторам интернета. Сегодня мне повезло. Я нашел описание IDocHostUIHandler на C#. Затем я создал свой класс CustomWebBrowser и унаследовал его от IDocHostUIHandler и AxShDocVw.AxWebBrowser. Переопределил методы интерфесфа. Только вот такое ощущение, что эти методы не работают. Например, что бы я ни написал в GetExternal ничего не происходит. Что не так?
Re: window.external
От: Spiceman  
Дата: 13.04.04 08:20
Оценка:
Я написал следующие строки:
private AxSHDocVw.AxWebBrowser axWebBrowser1;
...
DocHostUIHandler DocHostUIHandler = new DocHostUIHandler();
ICustomDoc itfCustomDoc = axWebBrowser1 as ICustomDoc;
itfCustomDoc.SetUIHandler(DocHostUIHandler);

Почему он не находит интерфейс ICustomDoc. Может дело в GUID? Интерфейс я описал так:
[ComVisible(true), ComImport(),
Guid("3050f3f0-98b5-11cf-bb82-00aa00bdce0b"),
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface ICustomDoc
{
[return: MarshalAs(UnmanagedType.I4)][PreserveSig]
int SetUIHandler([In, MarshalAs(UnmanagedType.Interface)] Object pUIHandler);
}
GUID я взял из MsHtmHst.idl из строчек:
[
object,
uuid(3050f3f0-98b5-11cf-bb82-00aa00bdce0b),
pointer_default(unique),
local
]
Может я чего не понимаю?
Re: window.external
От: Spiceman  
Дата: 13.04.04 08:54
Оценка:
С этим я разобрался. Надо было писать:
ICustomDoc itfCustomDoc = axWebBrowser1.Document as ICustomDoc;
Теперь SetUIHandler вызывается, но после происходит какая-то ошибка. Что опять не так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.