You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击提交触发Cannot read properties of null(reading 'closed')报错修复

错误原因

触发Uncaught TypeError: Cannot read properties of null (reading 'closed')的核心原因是:执行到if(!(window.opener.closed))代码行时,window.opener本身的值为null,对null值读取属性就会抛出类型错误。原代码默认假设window.opener一定存在,没有做空值校验,只要opener引用失效就会直接抛错中断后续逻辑。
常见触发场景包括:

  • 当前页面不是通过父页面window.open()唤起的弹窗,是用户直接输入地址、从书签打开的独立页面,浏览器默认给window.opener赋值为null
  • 当前页虽然是弹窗,但唤起它的父页面已经被关闭、或者因跨域安全策略被浏览器切断了opener引用
  • 弹窗唤起时配置了noopener参数、或者触发跳转的链接带了rel="noopener"属性,浏览器会主动清空opener引用避免钓鱼安全风险
可行修复方案

修复的核心逻辑是先判断window.opener是否存在,再访问它的属性,同时保留原有业务逻辑,opener不存在时直接走关闭窗口的逻辑即可,不会影响正常流程。
修复后的完整代码如下:

<a href="javascript:done1(1);" onMouseOver="submiti.src='/web/graphics/icons/submito.gif'" onMouseOut="submiti.src='/web/graphics/icons/submitu.gif'">
<img name="submiti" border="0" src="/web/graphics/icons/submitu.gif" width="60" height="22">
</a>

<script language="javascript">
function done1(v_hwde)
{
    // 增加window.opener空值校验,避免空引用报错
    if(window.opener && !window.opener.closed)
    {
        var data = document.tinform1.tirtby.value;
        // 原入参传入的是数字类型1,这里调整判断条件匹配入参类型,避免不必要的隐式类型转换
        if(v_hwde === 1){
            var data1 = document.tinform1.hwlocde.value;
            window.opener.document.tinform.hwlocde.value = data1;
        }
        window.opener.document.tinform.tirtby.value = data;
        window.opener.document.tinform.submit();
    }
    window.close();
}
</script>

如果业务存在跨域弹窗交互的场景,需要提前配置合法的跨域沟通权限,避免opener引用被浏览器同源策略拦截。


内容的提问来源于stack exchange,提问作者JaoTa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:48:52