我有一个使用postMessage在主机页面和iframe(不同域)之间进行通信的应用程序(Vanilla JS / Weback + Babel)。
我注意到,在iOS 12 Chrome浏览器上,确实发生了一个事件,该事件会在按钮单击之类的交互时进入我的监听器。
事件数据如下:
{
"type":"org.chromium.contextMenuMessage",
"requestId":"CC0C490584C989ACE524F0ED69F418DD",
"x":245,
"y":399.5
}
是什么?我找不到任何可以解释这种行为的资源。
编辑:而且,关于此事件的最奇怪的事情是,它似乎出现在生产环境中,而不是在本地主机上。
答案 0 :(得分:1)
它仅触发跨域消息。如果父母和孩子在同一个域中,则不会发生。至少这是我所发现的,可悲的是,我也坚持寻找更多信息。
答案 1 :(得分:1)
我在自己的应用中看到了非常相似的内容。我正在从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
事件。