1. ホーム
  2. javascript

カスタムイベントで追加データを渡す方法はありますか?

2023-07-21 07:29:21

質問

私は2つの自律的なユーザスクリプトの間でデータを渡す必要があります。 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環境と1つのユーザースクリプト内ではうまく動作しますが、ユーザースクリプトで発生したイベントがその外や別のユーザースクリプト内でキャッチされると data プロパティは undefined をChromiumで使用しています。渡されたデータを保存すればいいんだろうけど sessionStorage に保存することもできますが、シームレスとは程遠いです。他のエレガントなソリューションがありますか?完璧が必要であり、達成することができる、私はそれを感じることができます。

どのように解決するのですか?

そうです。 MessageEvent または CustomEvent .

使用例です。

//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);