清泛IT社区
标题:
近期 Chrome 下 Discuz 兼容问题修复记录:AJAX 提交失效与移动链接误跳转
[打印本页]
作者:
App Inventor 2
时间:
3 小时前
标题:
近期 Chrome 下 Discuz 兼容问题修复记录:AJAX 提交失效与移动链接误跳转
最近排查并修复了 2 个和新版 Chrome 兼容性相关的问题,记录如下。
一、AJAX 操作失效,表现为“加载中”一闪而过,没有后续动作
现象:
1. 登录、帖子分类、部分弹层提交等 AJAX 操作失效
2. 浏览器控制台最初还伴随扩展注入报错,但关闭扩展后问题依旧存在
3. 页面没有明确报错,但提交后没有结果
原因:
Discuz 旧版很多“ajaxpost”实际上是通过隐藏 iframe 提交表单,再从 iframe 返回文档中读取结果。
这套老机制在新版 Chrome 下兼容性较差,主要包括:
1. 旧代码依赖过时的返回读取方式,拿不到正确内容
2. 隐藏 iframe 的空白 load 容易被误判为提交完成
3. 原逻辑使用了 iframe.loading 作为自定义状态,和现代浏览器原生属性产生冲突
4. inajax=1 的返回很多是 XML/CDATA 包裹内容,不能简单按 responseText 直接处理
修复方式:
1. 在现代浏览器下,_ajaxpost 优先改为 XMLHttpRequest + FormData 提交
2. 保留旧 iframe 逻辑作为回退
3. 对返回内容增加 XML/CDATA 解包处理
4. 修正旧 iframe 空白 load 误判
5. 去掉对 iframe.loading 的依赖,改用内部自定义状态
结果:
登录、帖子分类等 AJAX 表单提交已恢复正常。
例如访问:
forum.php?mod=viewthread&tid=2865&fromguid=hot&extra=&mobile=2
不会正常回到对应的电脑版帖子地址,而是错误跳转到:
misc.php?mod=mobile
原因:
Discuz 全局移动识别逻辑里,当请求带 mobile 参数但当前环境未识别为移动端时,旧代码直接统一跳转到 misc.php?mod=mobile。
这个兜底对帖子页、版块页都不合理,因为它丢失了原始访问路径和参数。
修复方式:
调整全局移动识别入口逻辑:
1. 当桌面环境访问 mobile=2/mobile=yes 等移动链接时
2. 自动移除 mobile、simpletype、forcemobile 参数
3. 回退到当前页面对应的普通版 URL
4. 不再统一跳到 misc.php?mod=mobile
结果:
电脑端访问移动帖子链接时,会正确回到对应的电脑版帖子页,不再误跳转。
欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/)
Powered by Discuz! X3.3