帝国CMS插件 · AI · 模板
Uncaught TypeError: Cannot read properties of null (reading 'ReloadChangeFilePage')window.open 开窗时,若第二个参数为空字符串 '',浏览器会自动隐式添加 noopener 策略,直接清空子窗口的 window.opener,导致 opener = null。// 原生报错代码 window.opener.ReloadChangeFilePage(); window.close();opener 为 null 时,读取 ReloadChangeFilePage 属性,直接触发类型错误,最终导致裁剪完成不刷新、图片不更新。
打开eadmin\admin\ecmseditor\file.php文件,在ReloadChangeFilePage上方添加
const ecmsChannel = new BroadcastChannel('fhqdgv.cn');
ecmsChannel.onmessage = function(e) {
if (e.data === 'ReloadChangeFilePage') {
ReloadChangeFilePage();
}
};
打开 e/admin/ChangeFile.php,找到页面底部裁剪完成、确认选择的回调位置,删除原生 window.opener 报错代码,替换为广播发送代码:
echo"<script>opener.ReloadChangeFilePage();window.close();</script>"
替换为
echo"<script>
const ecmsChannel = new BroadcastChannel('fhqdgv.cn');
ecmsChannel.postMessage('ReloadChangeFilePage');
ecmsChannel.close();
window.close();
window.close();
</script>";
BroadcastChannel 名称必须完全一致,否则无法通信close(),避免多窗口重复监听、内存溢出