Vraag Is er een manier om aanvullende gegevens door te geven via aangepaste evenementen?


Ik moet gegevens tussen twee autonome gebruikersdocumenten doorgeven - idealiter zonder de unsafeWindow object - en ik dacht dat het gebruik van aangepaste evenementen de manier zou zijn om te gaan. Ik dacht aan zoiets (laten we het MSIE-model negeren voor het doel van het voorbeeld):

addEventListener("customEvent", function(e) {
  alert(e.data);
});

var custom = document.createEvent("HTMLEvents");
custom.initEvent("customEvent", true, true);
custom.data = "Some data...";
dispatchEvent(custom);

Dit werkt mooi in de standaard javascript-omgeving en binnen één gebruikers-script, maar wanneer de gebeurtenis wordt afgevuurd door het gebruikers-script en buiten de gebruiker of in een ander gebruikers-script wordt gevangen, data eigendom is undefined in chroom. Ik veronderstel dat ik de doorgegeven gegevens gewoon kon opslaan in de sessionStorage, maar het is verre van naadloos. Nog andere elegante oplossingen, heren en heren? Perfectie nodig en kan worden bereikt, ik kan het voelen.


41
2018-02-23 16:32


oorsprong


antwoorden:


Ja, je kunt een a gebruiken MessageEvent of a CustomEvent.

Voorbeeld gebruik:

//Listen for the event
window.addEventListener("MyEventType", function(evt) {
    alert(evt.detail);
}, false);

//Dispatch an event
var evt = new CustomEvent("MyEventType", {detail: "Any Object Here"});
window.dispatchEvent(evt);

60
2018-02-23 17:46



pass object met meer details als attributen:

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


6
2017-09-23 06:43