Est-il possible de transmettre des données supplémentaires via des événements personnalisés?
J'ai besoin de passer des données entre deux autonome userscripts - idéalement w/o de toucher le unsafeWindow
objet - et j'ai pensé à utiliser des événements serait la voie à suivre. J'ai pensé à quelque chose comme ceci (faisons abstraction de la MSIE modèle pour les fins 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 la norme de l'environnement javascript et à l'intérieur d'un script, mais lorsque l'événement est déclenché par le script et pris à l'extérieur ou à l'intérieur d'un autre script, le data
propriété est undefined
dans chrome. Je suppose que je pourrais juste enregistrer les données passées dans le sessionStorage
, mais il est loin d'être homogène. Toutes les autres solutions élégantes, messieurs et gentlewomen? La Perfection besoin et peut être atteint, je peux le sentir.
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez utiliser un
MessageEvent
ou unCustomEvent
.Exemple d'utilisation:
new CustomEvent('eventName')
constructeur, transmettre les données dans un CustomEventInit de hachage, identifié par les "détail" comme ceci:new CustomEvent('eventName', {'detail': data});
.CustomEvent
ainsi. Notez que vous devez utiliserdetail
propriété, seule celle-ci sera disponible sousevent.detail
dans l'écouteur.detail
est dansevent.originalEvent
.passer de l'objet avec plus de détails comme attributs:
https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
'detail1': "something", detail2: "something else"
dans une propriété nomméedetail
dans l'ordre pour que cela fonctionne:var event = new CustomEvent('build', { detail: { 'detail1': "something", detail2: "something else" } });