vue项目在客户端点击事件的问题

看评论的回答,我们客户端是c#写的,嵌入的网页也并非是使用webview链入的,他们里面也嵌入(?我不知道用什么词合适)了浏览器内核,比如使用:browser.url="前端路由"来渲染我们的页面。我不知是否和评论的回答移动端的问题有区别?


原问题:
vue项目,直接在浏览器内运行,点击事件正常;
嵌入到客户端以后,点击事件出现延迟。例如:

在浏览器中,页面加载出来以后,首页里点击模块A,页面跳转到模块A的页面;
客户端中,页面加载出来以后,首页里点击模块A,无任何响应,事件没有执行,等3——5秒以后再次点击,页面才进行跳转。

在客户端里打断点测试发现:node-modules/vue/dist/vue.esm.js中

if (useMicrotaskFix) {  
  var attachedTimestamp = currentFlushTimestamp;  
  var original = handler;  
  handler = original._wapper function (e) {  
    if (  
      // no bubbling, should always fire.  
 // this is just a safety net in case event.timeStamp is unreliable in // certain weird environments... 
     e.target === e.currentTarget ||  
      // event is fired after handler attachment  
     e.timeStamp >= attachedTimestamp ||  
      // bail for environments that have buggy         event.timeStamp implementations  
 // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState // #9681 QtWebEngine event.timeStamp is negative value 
     e.timeStamp <= 0 ||  
      // #9448 bail if event is fired in another document in a multi-page  
 // electron/nw.js app, since event.timeStamp will be using a different // starting reference  
     e.target.ownerDocument !== document  
    ) {  
      return original.apply(this, arguments)  
    }  
  };  
}

e.timeStamp >= attachedTimestamp 这一条件没有满足。
直到等待e.timeStamp满足条件以后才执行。

浏览器测试过程中没有发生过这种情况.
是哪里的问题呢?

阅读 306
评论 更新于 1月15日
    2 个回答
    Meathill
    • 8.6k

    很早的时候,为了识别 tap 和缩放,移动端浏览器有个 300ms 的延迟。后来,浏览器如果发现 <meta name="viewport" content="user-scalable=no"> 缩放被禁止了,就会移除这个延迟。我猜测有可能是 webview(即应用里)没有做这个处理,导致出现你说的问题。

    可以临时引入一个 fastclick,看看问题会不会解决。

    评论 赞赏 1月14日