Chromium 内部 postMessage 事件

Internal Chromium postMessage event

我有一个使用 postMessage 在主机页面和 iframe(不同域)之间进行通信的应用程序 (Vanilla JS / Webback + Babel)。

我注意到,在 IOS 12 Chrome 浏览器确实发送了一个事件,该事件在我的侦听器中发生了诸如按钮单击之类的交互。

事件数据如下所示:

{ "type":"org.chromium.contextMenuMessage", "requestId":"CC0C490584C989ACE524F0ED69F418DD", "x":245, "y":399.5 }

这是什么?我找不到任何可以解释该行为的资源。

编辑:另外,这个事件最奇怪的是,它似乎出现在生产环境中,但不出现在本地主机上。

它只触发一条消息cross-domain。如果 parent 和 child 在同一个域中,则不会发生。至少那是我发现的,遗憾的是,我也一直在寻找更多信息。

我在我的应用程序上看到了一个非常相似的东西。我在 iOS v12 和 Chrome v76.0.3809 上接收来自 Chrome 的跨域 iframe 消息。我收到的消息内容不同,更多的形式是:

{
    iv: e8LCrn94cSbycO3i
    payload: daPXeVR5GBg2IffLQ/2fuTmVGzJLnM++z2nC+cjR5kGcG1VhIBHni6tIrw94Gg+KvyMUMVNY3mjfJ9jMhT4g8fcnngZkiLirqoUOqMagVY3gaEzYBCb4ZVgtRelv/paccs7hc/rMi+cDr2eCOSzzKQ6fpHU=
    target_frame_id: 419b482d9b6c4565f8dd4e2f470a518
    type: org.chromium.encryptedMessage
}

我不确定 Chrome 具体使用这些数据的目的是什么,它最有可能用于与加载项通信。

这里的要点是,如果您使用以下内容在 iframe 中收听消息:

window.addEventListener('message', callback);

然后 您将收到通过 postMessage 发送的所有消息,您可以对它们进行过滤。页面上的任何代码(包括浏览器)都能够发送 message 事件。