7

去年webkit removed the 350ms delay for iOS。当我在Safari的移动浏览器中运行我的网站时,延迟不再存在,并按预期工作。iOS Standalone App 300ms点击延迟

但是,当我在standalone mode中运行我的Web应用程序时,延迟存在,并且显而易见。

这里是我的元标记,我使用:那种

<meta name="viewport" content="initial-scale=1.0, user-scalable=no, maximum-scale=1, width=device-width"> 

我试过的变化,没有运气。

很难找到关于独立应用程序的任何信息,这是一个非常明显的问题。

有谁知道为什么这个350毫秒延迟点击只发生在独立模式?作为一种解决方法,我不得不将fastclick纳入该项目,这并不理想。

注:我在运行iOS 9.3.5/iPhone 6

+1

这个问题似乎是在iOS的11独立的Web应用程序,现在固定的工作。另请参阅:https://forums.developer.apple.com/thread/43415 – user2309038

回答

9

人们似乎没有本土的解决方法,这似乎是一个已知的问题,无论being fixed in webkit.

开始咆哮

苹果缺乏支持,关注独立应用程序的细节确实令人难以置信;尤其是9.3.5版。

在此问题和独立应用程序中的主要Youtube player issue之间。或许苹果应该停止担心取下耳机插孔,并增加了一些神秘的“触摸条,实际上解决他们该死的平台。

结束咆哮

你将不得不使用FastClick来解决这个问题。应用它只适用于iOS,你可以走得更远,只适用于独立应用程序,因为如果应用程序不是独立的,它可以正常工作。

我的脚本标签放在DOM之后,初始化看起来像这样:

if (isIos() && isRunningStandalone()) { 
     // Initialize Fast Click 
     // Even with the latest webkit updates, unfortunatley iOS standalone apps still have the 350ms click delay, 
     // so we need to bring in fastclick to alleviate this. 
     // See https://stackoverflow.com/questions/39951945/ios-standalone-app-300ms-click-delay 
     if ('addEventListener' in document) { 
      document.addEventListener('DOMContentLoaded', function() { 
       FastClick.attach(document.body); 
      }, false); 
     } 
    } 

    isIos = function() { 
     // Reference: https://stackoverflow.com/questions/9038625/detect-if-device-is-ios#answer-9039885 
     return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; 
    }; 

    isRunningStandalone = function() { 
     // Bullet proof way to check if iOS standalone 
     var isRunningiOSStandalone = window.navigator.standalone; 

     // Reliable way (in newer browsers) to check if Android standalone. 
     // https://stackoverflow.com/questions/21125337/how-to-detect-if-web-app-running-standalone-on-chrome-mobile#answer-34516083 
     var isRunningAndroidStandalone = window.matchMedia('(display-mode: standalone)').matches; 

     return isRunningiOSStandalone || isRunningAndroidStandalone; 
    }; 
+1

感谢最近的答案。我不能相信这在2017年仍然是一件事!无论如何,没有人使用苹果的“点击滚动”功能...... – JoLoCo

0

当您以独立模式运行它时,似乎可以运行不同的浏览器实例,可能是旧版本。恐怕不知道修理或预计日期。

作为一种变通方法,你可以尝试,如果ontouchend可能是你的情况下