Я хотел бы создать COM-объект на C# и использовать его через IDispatch из JScript. Эта часть довольно проста.
Я также хочу реализовать простые обратные вызовы для COM-объекта, аналогичные событию, предоставляемому объектом XmlHttpRequest, который можно использовать в браузере. Эта модель позволяет Javascript присоединять обработчики событий следующим образом:
var xmlhttp = new ActiveXObject("MSXML.XMLHTTP");
xmlhttp.onReadyStateChange = function() {
...
};
Я хочу, чтобы код JScript на стороне клиента выглядел так:
var myObject = new ActiveXObject("MyObject.ProgId");
myObject.onMyCustomEvent = function(..args here..) {
...
};
Как выглядит код C#? Мне нужен общий случай - я хотел бы иметь возможность передавать аргументы обратно в Javascript fn.
Я видел Как сделать так, чтобы элемент управления ActiveX, написанный на C#, вызывал события в JavaScript при нажатии?, но ответы выглядят очень сложными для реализации и сложными для использования.
Из этой статьиследует, что события XMLHttpRequest не являются событиями COM. onreadystatechange
является свойством типа IDispatch
. Когда клиенты скриптов задают для этого свойства функцию, JScript маршалирует ее как объект IDispatch.
Единственная оставшаяся проблема — вызвать IDispatch из C#.