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

PHP实现QR码下载功能后preloader预加载器持续加载问题排查

问题原因

  • 你绑定的页面跳转逻辑将下载链接判定为普通页面跳转:pageTransition的conditions校验规则没有排除下载链接,点击下载按钮时,脚本认为你要跳转页面,执行onTransitionStart逻辑移除了预加载器的loaded类,触发预加载器显示。
  • 下载请求不会触发页面跳转:你后端返回的响应头带Content-disposition: attachment,只会触发浏览器下载行为,不会刷新或跳转当前页面,因此跳转逻辑的onReady回调永远不会执行,无法给预加载器加回loaded类,导致预加载器一直处于加载状态。

解决方法

方案1:给下载链接添加排除标识(推荐)

给下载的<a>标签新增自定义属性作为排除标记,示例代码:

<a id="download" href="download_qr_code.php?url=<?=encodeURIComponent($row["QR"])?>" data-preloader-skip="true">
  <i title="Download"  class="fa fa-download fa-4x" aria-hidden="true"></i>
</a>

修改预加载器的conditions判断逻辑,新增对该属性的校验:

conditions: function (event, link) {
  return link && 
  !/(\#|javascript:void\(0\)|callto:|tel:|mailto:|:\/\/)/.test(link) && 
  !event.currentTarget.hasAttribute('data-lightgallery') &&
  !event.currentTarget.hasAttribute('data-preloader-skip'); // 新增排除规则
}

方案2:修改正则规则直接排除下载路径

直接在正则里匹配下载接口的路径,无需修改HTML代码:

conditions: function (event, link) {
  return link && 
  !/(\#|javascript:void\(0\)|callto:|tel:|mailto:|:\/\/|download_qr_code\.php)/.test(link) && 
  !event.currentTarget.hasAttribute('data-lightgallery');
}

额外安全提示

你当前的下载接口存在任意文件读取漏洞:直接读取$_GET['url']传入的路径没有做校验,攻击者可以构造路径遍历的参数读取服务器任意敏感文件。建议添加校验逻辑,限制仅允许读取指定目录下的QR码图片,比如校验url前缀是否为你站点的QR码存储路径,或者限制仅能读取合法的图片后缀文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:36:02