J'ai besoin de transmettre des données entre deux scripts utilisateur autonomes - idéalement sans toucher à l'objet unsafeWindow
- et je pensais que l'utilisation d'événements personnalisés serait la voie à suivre. J'ai pensé à quelque chose comme ça (ignorons le modèle MSIE dans le cadre de l'exemple):
addEventListener("customEvent", function(e) {
alert(e.data);
});
var custom = document.createEvent("HTMLEvents");
custom.initEvent("customEvent", true, true);
custom.data = "Some data...";
dispatchEvent(custom);
Cela fonctionne bien dans l'environnement javascript standard et dans un script utilisateur, mais lorsque l'événement est déclenché par le script utilisateur et pris en dehors de celui-ci ou dans un autre script utilisateur, la propriété data
est undefined
en chrome. Je suppose que je pourrais simplement enregistrer les données transmises dans le sessionStorage
, mais c'est loin d'être transparent. D'autres solutions élégantes, messieurs et femmes douces? La perfection a besoin et peut être atteinte, je la sens.
Oui, vous pouvez utiliser un MessageEvent
ou un CustomEvent
.
Exemple d'utilisation:
//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);
passez l'objet avec plus de détails comme attributs:
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