Как предоставить обработчик события для объекта JavaScript, доступ к которому осуществляется через интерфейс COM
Я использую COM-интерфейс Adobe Acrobat для управления содержимым документа PDF, размещенного в окне, предоставленном моим приложением.
Похоже, что Adobe приостановила разработку интерфейса COM примерно в 2006 году. Хотя библиотека типов Acrobat предоставляет доступ к довольно ограниченному набору функций, интерфейс COM не обеспечивает прямой доступ ко многим функциям, доступным в меню + панели инструментов приложения Acrobat. В эти дни они ожидают, что вы будете работать через их JavaScript API.
Библиотека типов Acrobat позволяет получить доступ к объекту JavaScript, связанному с конкретным документом. Например, следующее переворачивает первую страницу документа с ног на голову:
[...]
var
Doc : CAcroPDDoc; // interface Acrobat document
vJS : OleVariant; // access to JavaScript object
begin
Doc := CoAcroPDDoc.Create;
Doc.Open(AFileName);
try
vJS := Doc.GetJSObject;
try
vJS.SetPageRotations(0, 0, 180);
finally
VarClear(vJS);
end;
finally
Doc := Nil;
end;
end;
Это прекрасно работает, когда я хочу просто вызвать метод одного из объектов в JavaScript API Acrobat. Мой вопрос: как мне связать код моего приложения с событиями, которые предоставляют некоторые из этих объектов? Например, есть даже JS, который возникает, когда пользователь щелкает закладку в документе - как бы я предоставил обработчик событий для чего-то подобного?
Я знаю, как реализовать исходящий интерфейс и подключить его к COM-объекту через ConnectionPointContainer/FindConnectionPoint. Но я понятия не имею, как подключиться к событию JS для объекта, к которому я обращаюсь (с помощью вызова, как GetJSObject выше), который находится на другой стороне интерфейса COM-объекта. Так что это не тот случай, когда я могу пока "показать свой код", потому что я не знаю, с чего начать.