Dynamics CRM中父子iFrame通信问题:标签闪烁功能失效排查
解决Dynamics CRM中跨协议iframe postMessage监听失效问题
问题场景
- 在Dynamics CRM v8.1本地部署版本的表单中,开发了一个HTML Web资源,该资源会动态生成iframe
- 需求是监听子iframe的请求,实现浏览器标签闪烁/停止闪烁的功能
- 环境:CRM主页面为HTTP协议,子iframe为HTTPS协议
- 已做操作:取消了该HTML Web资源的「限制跨框架脚本」勾选
- 问题:子iframe通过
window.top.postMessage发送消息,但父页面的messageHandler中的debugger始终无法触发
问题根因
监听器错误绑定在了当前HTML Web资源的window对象上,而子iframe是向window.top(即CRM的顶级窗口)发送消息,导致消息无法被捕获。
解决方案
将消息监听器的绑定对象从window改为window.top,示例代码如下:
// 错误写法:绑定在当前window // window.addEventListener('message', messageHandler, false); // 正确写法:绑定在顶级窗口window.top window.top.addEventListener('message', messageHandler, false); function messageHandler(event) { // 这里添加消息处理逻辑,比如标签闪烁控制 debugger; // 建议验证event.origin,确保消息来源可信 // if (event.origin === 'https://你的子iframe域名') { ... } }
补充说明
- 跨协议(HTTP→HTTPS)场景下,必须确保
postMessage的目标窗口正确,同时在消息处理函数中验证event.origin可避免接收不可信来源的消息 - 需确认HTML Web资源的「限制跨框架脚本」选项已取消,该设置会直接影响跨框架脚本的交互权限
内容的提问来源于stack exchange,提问作者jaden behr
相关产品推荐
相关产品推荐

