Я создал объект, который имеет несколько методов. Некоторые из этих методов являются асинхронными, и поэтому я хочу использовать события, чтобы иметь возможность выполнять действия после завершения методов. Для этого я попытался добавить addEventListener к объекту.
var iSubmit = {
addEventListener: document.addEventListener || document.attachEvent,
dispatchEvent: document.dispatchEvent,
fireEvent: document.fireEvent,
//the method below is added for completeness, but is not causing the problem.
test: function(memo) {
var name = "test";
var event;
if (document.createEvent) {
event = document.createEvent("HTMLEvents");
event.initEvent(name, true, true);
} else {
event = document.createEventObject();
event.eventType = name;
}
event.eventName = name;
event.memo = memo || { };
if (document.createEvent) {
try {
document.dispatchEvent(event);
} catch (ex) {
iAlert.debug(ex, 'iPushError');
}
} else {
document.fireEvent("on" + event.eventType, event);
}
}
}
iSubmit.addEventListener("test", function(e) { console.log(e); }, false);
//This call is added to have a complete test. The errors are already triggered with the line before this one.
iSubmit.test();
Это вернет ошибку: не Failed to add eventlisterens: TypeError: 'addEventListener' called on an object that does not implement interface EventTarget."
Теперь этот код будет использоваться в приложении PhoneGap, и когда я это сделаю, он работает на Android/IOS. Однако во время тестирования было бы хорошо, если бы я мог заставить его работать хотя бы в одном браузере.
PS> Я знаю, что мог бы включить всплывающее окно и затем прослушать корень документа, но я хотел бы иметь немного ООП, где каждый объект может работать сам по себе.