Есть ли способ передачи дополнительных данных через пользовательские события?
Мне нужно передать данные между двумя автономными учетными записями - в идеале, не касаясь объекта unsafeWindow
, и я думал, что использование пользовательских событий будет способом. Я подумал о чем-то подобном (не будем рассматривать модель MSIE для примера):
addEventListener("customEvent", function(e) {
alert(e.data);
});
var custom = document.createEvent("HTMLEvents");
custom.initEvent("customEvent", true, true);
custom.data = "Some data...";
dispatchEvent(custom);
Это хорошо работает в стандартной среде javascript и в пределах одного пользовательского текста, но когда событие запускается с помощью пользовательского скрипта и вызывается за его пределами или внутри другого пользовательского документа, свойство data
имеет значение undefined
в хром. Полагаю, я мог бы просто сохранить переданные данные в sessionStorage
, но это далеко не просто. Любые другие элегантные решения, господа и джентльмены? Совершенство нужно и может быть достигнуто, я чувствую это.
Ответы
Ответ 1
Да, вы можете использовать MessageEvent
или CustomEvent
.
Пример использования:
//Listen for the event
window.addEventListener("MyEventType", function(evt) {
alert(evt.detail);
}, false);
//Dispatch an event
var evt = document.createEvent("CustomEvent");
evt.initCustomEvent("MyEventType", true, true, "Any Object Here");
window.dispatchEvent(evt);
Ответ 2
передать объект с более подробной информацией в качестве атрибутов:
var event = new CustomEvent('build', { 'detail1': "something", detail2: "something else" });
function eventHandler(e) {
log('detail1: ' + e.detail.detail1);
log('detail2: ' + e.detail.detail2);
}
https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events