Frage iOS Standalone App 300ms Klickverzögerung


Letztes Jahr webkit Die Verzögerung von 350 ms für iOS wurde entfernt. Wenn ich meine Website im Safari-Browser starte, ist die Verzögerung nicht mehr vorhanden und funktioniert wie erwartet.

Wie auch immer, wenn ich meine Webanwendung in Standalone-Modusdie Verzögerung existiert und ist offensichtlich offensichtlich.

Hier ist mein Metatag, den ich verwende:

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

Ich habe Variationen der Sorte versucht, ohne Glück.

Es ist schwierig, etwas über eigenständige Anwendungen zu finden, nichtsdestoweniger dieses offensichtliche Problem.

Weiß jemand, warum diese Verzögerung von 350 ms nur im Standalone-Modus auftritt? Als Workaround muss ich mitbringen Schnellklick in das Projekt, das nicht ideal ist.

Hinweis: Ich verwende iOS 9.3.5 / iPhone 6


7
2017-10-10 05:46


Ursprung


Antworten:


Es scheint keine systemeigene Problemumgehung zu geben, und dies scheint ein bekanntes Problem zu sein, unabhängig davon in Webkit behoben werden.

Beginne Rant

Apples Mangel an Unterstützung und Liebe zum Detail für Standalone-Apps ist wirklich unglaublich; besonders ab Version 9.3.5.

Zwischen dieser Ausgabe und dem Major Youtube-Player-Problem in eigenständigen Apps. Vielleicht sollte Apple aufhören, sich Sorgen um das Entfernen der Kopfhörerbuchse zu machen, und ein paar mystische "Touch Bar" hinzufügen, und tatsächlich ihre verdammte Plattform reparieren.

Ende Rant

Sie müssen verwenden Fastklick um das Problem zu lösen. Wende es nur auf iOS an. Sie können weiter gehen und es nur auf eigenständige Apps anwenden, da es gut funktioniert, wenn die App nicht im Standalone-Modus ist.

Mein Skript-Tag wird nach dem DOM platziert und die Initialisierung sieht folgendermaßen aus:

    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;
    };

9
2017-10-26 21:54



Apple hat vor kurzem iOS 11 veröffentlicht (11.2.6 in meinem Fall), mit mehr Unterstützung für progressive Web-Anwendungen (wie manifest.json und andere PWA-Funktionen lesen), und schließlich scheint dieses Problem gelöst zu haben, indem die Klickverzögerung nicht länger auferlegt wurde.


2
2018-03-15 19:23



Es scheint eine andere Browser-Instanz auszuführen, wenn Sie sie in einer eigenständigen Version ausführen, wahrscheinlich in einer älteren Version. Nicht bekannt, weder fix noch erwartet Datum, ich habe Angst.

Als Workaround können Sie versuchen, ob ontouchend kann für Ihren Fall arbeiten


0
2018-03-03 14:54