В C# можно написать обработчик событий следующим образом:обработчиков событий ActiveX в качестве HTA с помощью Javascript
var wdApp = new Microsoft.Office.Interop.Word.Application();
wdApp.DocumentBeforeSave += (Document doc, ref bool saveAsUI, ref bool cancel) => {
//do stuff here
};
В VBA/VB6, я могу использовать статическую обработку событий:
Dim WithEvents wdApp As Word.Application
Private Sub wdApp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
'do stuff here
End Sub
Я бы предпочел для использования динамической обработки событий. Однако, в Javascript, даже при использовании статическога обработки с синтаксисом события описано here:
var wdApp = new ActiveXObject('Word.Application');
wdApp.Visible = true;
function wdApp::Quit() {
window.alert('Quit');
};
это терпит неудачу:
0x800a138f - JavaScript runtime error: Object expected
Кроме того, статическая обработка событий является опцией в VBA/VB6, поскольку декларации может быть помечен Private
. Однако в Javascript как переменная, так и обработчик должны быть объявлены в глобальной области.
Два вопроса:
Как обрабатывать события автоматизации созданных объектов с Javascript в среде HTA? (Примечание: Я знаю, что это возможно в WSH с помощью префикса передается
CreateObject
и функцию с именемwdApp_Quit
, но я искал решение ОМТ.)Как я могу сделать это без загрязняющих глобальный охват?
Существует старый вопрос here.
У меня был взгляд, но я не могу заставить работать. В упомянутом решении WSH используется «ConnectObject», и я попытался использовать его в HTA с WScript.Shell, но он не работает. С 2009 года есть вопрос без ответа на ваш MSDN, поэтому похоже, что это будет невозможно. – Gordon
Должно быть objectname :: eventname. https://msdn.microsoft.com/en-us/library/ms974564.aspx –
Соединение событий, насколько я видел, зависит от объекта WScript, которого нет в mshta.exe host (который запускает HTAs). Однако mshta может вызывать объект javascript с узлом wscript.exe и получать доступ к объекту WScript. Будет ли такое решение для вас правильным, или это кажется слишком уродливым? –