如何修改父窗口与iframe的window.postMessage()逻辑,仅在数据存在时发送消息
仅当model存在时发送postMessage响应
很简单,你只需要在原有的消息监听逻辑里,添加一个对model是否存在的判断,只有当它有效时才执行postMessage发送操作。
修改后的完整代码:
window.addEventListener('message', (event) => { if (hasOwnProperty.call(event.data, 'mounted')) { // 新增判断:确保model存在时才发送消息 if (model) { $('iframe')[0].contentWindow.postMessage({ model }, '*'); } } });
关于判断逻辑的补充说明:
- 上面的
if (model)会自动过滤掉null、undefined、空字符串、0、false这些JavaScript里的“假值”。如果你的model可能是这些合法的有效值(比如数值0或者布尔值false),那你需要更精确的判断:// 仅排除undefined和null的情况 if (model !== undefined && model !== null) { $('iframe')[0].contentWindow.postMessage({ model }, '*'); } - 如果你还需要确保
model是一个有实际内容的对象(不是空对象),可以再加一层检查:if (model && Object.keys(model).length > 0) { $('iframe')[0].contentWindow.postMessage({ model }, '*'); }
另外提个小建议:尽量不要用'*'作为postMessage的目标origin,最好指定你的iframe所在的具体域名(比如'https://your-iframe-domain.com'),这样能避免消息被恶意页面拦截,提升安全性。
内容的提问来源于stack exchange,提问作者Michael Hays
相关产品推荐
相关产品推荐

