У меня есть этот BHO, который я успешно представил метод JS из него с помощью этой темы: Вызов метода BHO из Javascript?.
Когда я открываю CAxWindow для размещения HTML-документов, я хотел бы использовать этот экспортированный метод, но кажется, что он не работает и для этого окна.
Я пытался сделать собственный класс, как:
class Bubble:
public CAxWindow,
public IDispEventImpl<1, Bubble, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 0>
{
public:
BEGIN_SINK_MAP(Bubble)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE , OnDocumentComplete)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOWNLOADCOMPLETE , OnDownloadComplete)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_ONQUIT, OnQuit)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATEERROR, NavigateError)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2 , OnNavigateComplete2)
END_SINK_MAP()
Чтобы попытаться повторить процесс раскрытия методов в документе завершен, но кажется, что событие не запускается.
Итак, в основном мой вопрос: есть ли способ открыть js методы для моего CAxWindow?
Большое спасибо!
IDispEventImpl
реализует интерфейс приемника для обработки вызовов методов событий. Вы не можете расширять его своими собственными дополнительными методами напрямую. Кроме того, JavaScript на самом деле не видит этот интерфейс из кода сценариев, поскольку он подключен к сайту управления ActiveX, а не к механизму сценариев. IDispEventImpl
это вообще упрощенная реализация IDispatch
COM интерфейс, счетчик ссылок бесплатный, подходит для мероприятия IDispatch::Invoke
вызовите интерфейс приемника точки подключения.
Вам нужно либо реализовать COM-объект с поддержкой библиотеки типов с помощью IDispatch
интерфейс (библиотека типов используется механизмом сценариев для обнаружения реальных методов) или пользовательский IDispatch
или же IDispatchEx
реализация интерфейса (да, это может быть реализовано непосредственно на CAxWindow
класс как дополнительный базовый класс / интерфейс) обработка разрешения имени метода без библиотеки типов. Затем вы передадите этот объект скриптовому движку как external
объект или иначе.
Других решений пока нет …