javascript - 内部 Chromium postMessage 事件
问题描述
我有一个应用程序(Vanilla JS / Weback + Babel),它使用 postMessage 在主机页面和 iframe(不同域)之间进行通信。
我注意到,在 IOS 12 Chrome 浏览器上确实会发送一个事件,该事件会在我的侦听器中发生按钮点击等交互。
事件数据如下所示:
{
"type":"org.chromium.contextMenuMessage",
"requestId":"CC0C490584C989ACE524F0ED69F418DD",
"x":245,
"y":399.5
}
它是什么?我找不到任何可以解释这种行为的资源。
编辑:另外,这个事件最奇怪的是,它似乎出现在生产环境中,但不在本地主机上。
解决方案
我在我的应用程序上看到了非常相似的东西。我正在从 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
事件的能力。
推荐阅读
- android - 任务 ':expo-constants:compileDebugJavaWithJavac' 执行失败。(反应原生)
- angular - 更改 Angular 7 中的 webpack 配置并更改 CKEditor 5 的 SVG 设置以加载自定义插件
- c++ - 是否可以仅通过在 C++ 中存储分配的指针地址来分析内存?
- spring - 无法使用 Spring Security 加载静态资源
- c - 使用 void* 分配结构
- reactjs - 如何扩展 React 功能组件 Prop 类型?
- sql-server - SQL Server 2017 Management Studio:创建程序集错误
- php - preg_match 函数不适用于 if 语句?
- kubernetes - 创建集群所需的资源量 - Openshift v4.2
- android - 图像在 ImageView 中按大小扭曲