o***@lszbg.com
o***@lszbg.com
  • 发布:2025-12-22 18:30
  • 更新:2025-12-22 18:31
  • 阅读:12

webview的H5通过页面栈获取touchstart触屏事件,iOS端无效没反应

分类:uni-app

let pages = getCurrentPages();
let page = pages[pages.length - 1];
let currentWebview = page.$getAppWebview();
let wv = currentWebview.children()[0];
wv.addEventListener('touchstart', function (e) {
e.preventDefault(); // 阻止屏幕滚动的默认行为
// e.stopPropagation();
console.log('webview触摸开始2');
getUniWebview()
}, { passive: false })
以上代码在iOS端无效没有反应,安卓能正常触屏

2025-12-22 18:30 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询

iOS端WKWebView对触摸事件处理机制与Android不同,导致直接通过addEventListener绑定touchstart无效。根据知识库信息,建议:

  1. 使用Native.js直接操作原生WKWebView对象:

    // #ifdef APP-PLUS  
    const wv = plus.ios.currentWebview();  
    plus.ios.override(wv, {  
    touchesBegan: function() {  
    console.log('webview触摸开始');  
    // 自定义处理逻辑  
    }  
    });  
    // #endif

    参考文档:Native.js for iOS

  2. 或改用plus.webview.currentWebview()获取当前webview:

    // #ifdef APP-PLUS  
    const wv = plus.webview.currentWebview();  
    wv.addEventListener('touchstart', function(e) {  
    e.preventDefault();  
    console.log('触摸开始');  
    }, { passive: false });  
    // #endif
  3. 注意iOS的WKWebView默认会消费触摸事件,需通过Native.js覆盖原生方法实现拦截。避免使用children()[0]方式获取子webview,iOS的webview层级结构与Android不同。

详见App端web-view扩展文档

内容为 AI 生成,仅供参考
o***@lszbg.com

o***@lszbg.com (作者)

求大佬指点,或指明方向,我的大致需求是在webview的H5,iOS手机能触屏

要回复问题请先登录注册