Используя следующие JavaScript коды с веб-сайта Mozilla:
const Something = function(element) {
// |this| is a newly created object
this.name = 'Something Good';
this.handleEvent = function(event) {
console.log(this.name); // 'Something Good', as this is bound to newly created object
switch(event.type) {
case 'click':
// some code here...
break;
case 'dblclick':
// some code here...
break;
}
};
// Note that the listeners in this case are |this|, not this.handleEvent
element.addEventListener('click', this, false);
element.addEventListener('dblclick', this, false);
// You can properly remove the listeners
element.removeEventListener('click', this, false);
element.removeEventListener('dblclick', this, false);
}
const s = new Something(window);
Для этого я создал следующий window
объект в C# для обработки AddEventListener/removeEventListener
.
namespace JintTestsForms {
public sealed class JsWindow {
private Engine _engine;
public JsWindow(Engine engine) {
_engine = engine;
}
public void addEventListener(string type, object listener) {
}
public void addEventListener(string type, object listener, bool useCapture) {
}
public void addEventListener(string type, object listener, object options) {
}
public void removeEventListener(string type, object listener, bool useCapture)
{
}
}
}
Для большинства JavaScript кодов прослушивателей событий Jint правильно устанавливает listener
для функции (Func<,,,>
), но для вышеуказанного Jint задает для параметра listener
тип ExpandoObject
. Как вы отправляете события в этом случае?