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

点击触发window.location.reload报Uncaught TypeError的修复方法

问题根因
  • 核心是API用错:window.location.reload() 只接收一个可选布尔值参数(true表示强制从服务器重载,false表示优先读缓存),不支持传入URL实现跳转,你把跳转地址传给reload本身就不符合API规范。
  • 空引用报错来源:你在reload逻辑后紧跟了window.open('', '_self', ''); window.close()代码,这行代码会触发当前窗口卸载流程,部分浏览器在窗口卸载阶段会回收window.location对象将其置为null,此时访问reload属性就会抛出你看到的类型错误;另外如果页面里存在id="location"或者name="location"的DOM元素,也会覆盖全局window.location的默认引用,触发同类错误。
  • 逻辑冲突:页面跳转/重载本身就会替换当前页面的执行上下文,不需要额外执行关闭窗口的操作,两者同时写必然出现执行顺序异常。
修复方法
  1. 跳转到带参数的scantheid.php页面不要用reload,直接给window.location.href赋值即可。
  2. 删除冗余的window.open、window.close代码,避免提前触发窗口卸载。
  3. 增加基础容错:获取site1元素时先判断元素是否存在,避免元素不存在时提前抛出其他JS错误;拼接URL参数时用encodeURIComponent转义,避免特殊字符(中文、&、空格等)导致URL解析错乱。
修复后代码
echo "<FONT color=\"#FF0000\" class=\"ft10\" onClick=\"SetName('".$site."','".$scan4data."','".$hwid."','".$un."','".$hwde."','".$hwlocde."');\"><b>$barc</b></FONT></a><br>\n";

echo "<script type=\"text/javascript\">";
echo "function SetName(site, scan4data, hwid, un, hwde, hwlocde){";
echo "  var locname = hwlocde;";
echo "  var site1El = document.getElementById('site1');";
echo "  var site2 = site1El ? site1El.value : '';";
echo "  var txthwlocde = site2 + locname;";
// 直接赋值href完成跳转,参数统一转义
echo "  window.location.href = 'scantheid.php?site='+ encodeURIComponent(site2) + '&scan4data=' + encodeURIComponent(scan4data) + '&hwid=' + encodeURIComponent(hwid) + '&un=' + encodeURIComponent(un) + '&hwde=' + encodeURIComponent(hwde) + '&hwlocde=' + encodeURIComponent(hwlocde) + '&txthwlocde=' + encodeURIComponent(txthwlocde);";
echo "}";
echo "</script>";

补充:如果你的需求真的是重载当前页面而非跳转到新地址,直接调用window.location.reload()即可,不要传任何URL参数,也不要搭配关闭窗口的逻辑。

内容的提问来源于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:12:16