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

iPad模式下jquery.nicescroll.min.js报passive事件preventDefault错误

问题场景

iPad模式下运行页面时控制台抛出JS报错:

  • 报错信息:jquery.nicescroll.min.js:2054 unable to preventDefault inside passive event listener due to target being treated as passive,该报错由现代浏览器对触摸类事件监听器的passive默认规则触发
  • 报错调用栈:
    • NiceScrollClass.cancelEvent @ jquery.nicescroll.min.js:2054
    • self.ontouchstart @ jquery.nicescroll.min.js:1059
  • 现状:已找到未压缩版nicescroll.js的对应修复方案,但压缩版jquery.nicescroll.min.js暂未找到可行修复方法。
可行修复方案
  • 方案1:直接修改压缩版源码的事件注册参数
    压缩版代码仅做了去空格、变量名混淆处理,逻辑和未压缩版完全对应。打开jquery.nicescroll.min.js,全局搜索touchstart、touchmove关键字定位事件绑定代码段:
    现代浏览器下注册touchstart/touchmove这类滚动相关事件时,如果没有显式声明passive: false,会默认将监听器标记为被动模式,此时调用preventDefault()就会抛出对应错误。
    找到所有绑定触摸事件的addEventListener调用,给第三个参数显式加上passive:false配置即可,示例修改:

    // 修改前(压缩版常见写法)
    e.addEventListener("touchstart",t.ontouchstart)
    // 修改后
    e.addEventListener("touchstart",t.ontouchstart,{passive:false})
    

    如果原代码已经传了第三个布尔值参数(控制是否在捕获阶段触发),就把参数合并为对象格式,比如原参数是!1(即false),就替换为{capture:false,passive:false}。

  • 方案2:CSS属性兜底,无需修改JS源码
    给nicescroll绑定的滚动容器添加touch-actionCSS属性,告诉浏览器该区域的触摸行为不需要执行默认滚动逻辑,就不会触发被动事件监听器的限制:

    /* 替换为实际页面中nicescroll挂载的容器选择器 */
    .your-scroll-container {
      /* 完全禁用容器默认触摸行为,适合自定义滚动场景 */
      touch-action: none;
      /* 按需配置单方向原生滚动:
      touch-action: pan-x;  仅允许水平方向原生滚动
      touch-action: pan-y;  仅允许垂直方向原生滚动
      */
    }
    
  • 方案3:替换为已修复该问题的官方构建版本
    直接替换本地旧版压缩文件为官方后续发布的、已经修复passive事件兼容问题的最新压缩构建产物即可,不需要手动修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:57:21