it-swarm.com.de

"alert ()" und "confirm ()" funktionieren nicht mit "Apple-Mobile-Web-App-fähig"

Unter iOS (derzeit 7.0) sieht es so aus, als würden alert() und confirm() nicht funktionieren, wenn sich unsere Web-App auf dem Startbildschirm befindet (auch bekannt als Meta-Tag Apple-mobile-web-app-capable).

Ich habe einen Benutzer mit einem ähnlichen Problem auf Twitter gefunden:

https://Twitter.com/thomasfuchs/status/380137801259704320

Hat jemand eine temporäre Korrektur, wenn es wirklich einen Fehler in iOS 7 gibt?

19
allaire

Die JavaScript-Fehler alert() und confirm() wurden ab iOS 7.0.3 behoben.

8
andersen

Wir hatten ein ähnliches Problem mit Alarmen, die unsere Web-App brachen. Der spezifische Fall war eine Warnung, die durch das Ändern einer Auswahlliste ausgelöst wurde. Wir haben eine sehr einfache Testseite zusammengestellt:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
        <title></title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width">
    </head>
    <body>
        <select onchange="alert('broken!');">
            <option value="one">One</option>
            <option value="two">Two</option>
        </select>
    </body>
</html>

Wenn Sie diese Seite über Safari auf einem iPad ausführen und die Auswahlliste ändern, wird die Warnmeldung ausgelöst und Safari friert ein. Man muss dann tatsächlich Safari schließen. Dies betrifft Safari im Allgemeinen - Ihre Web-App muss nicht auf dem Startbildschirm fixiert werden. Sie sollten in der Lage sein, dies auf einem iPad mit iOS 7 auf dieser Testseite zu testen http://jsbin.com/AGoTejA/1 .

Wir haben dies auf einem iPad 2 (MC774B/A) und einem iPad 3 (MD367B/A) getestet und Safari stürzt bei beiden ab.

Eine harte Methode, um dieses Problem zu umgehen, besteht darin, setTimeout () zu verwenden, um die Ausführung der Warnung zu verzögern. Das Problem scheint nur zu bestehen, wenn Safari versucht, die Überlagerung anzuzeigen, die gleichzeitig die Elemente der Auswahlliste und einen Alarm anzeigt. Confirm () ist auf dieselbe Weise ebenfalls defekt.

14
Barrie

Ich weiß nicht, ob es sich um ein Design oder einen Fehler handelt, aber ich kann bestätigen, dass dies ein echtes Problem ist. Eine andere Sache, die Sie beachten sollten, ist, dass, wenn der Benutzer die Option zum Speichern von Kennwörtern hat, jede Site, die eine Anmeldung erfordert, fehlschlägt, da diese Aufforderung ebenfalls blockiert wird. (Sie können dies mit einem einfachen Formular mit einem Benutzernamen und einem Kennwort und sonst nichts versuchen und es wird einfach nicht übermittelt). Es gibt jedoch Problemumgehungen für alle drei Probleme. 

  1. Login - Stellen Sie im Formularkennzeichen für die Site autocomplete = "off" ein, oder stellen Sie fest, dass auf der Site IOS7 und im Vollbildmodus ausgeführt wird, und wenden Sie diese Einstellung an

    $('form').attr('autocomplete', 'off');
    
  2. Alarme und Bestätigungen - Sie können entweder eine benutzerdefinierte Funktion in JavaScript schreiben oder die vorhandenen Funktionen auf die gleiche Weise überschreiben wie hier: http://andrewensley.com/2012/07/override-alert-with-jquery-ui- dialog/ . Ich mag es, das SimpleModal-Plugin von Eric Martin zu verwenden, das eine eingebaute Confirm-Überschreibung enthält, die unterste Demo auf http://www.ericmmartin.com/projects/simplemodal-demos/ .

Ich hoffe, dass etwas davon hilft.

5
Richard Wilson

Ich habe es mit einem setTimeout gelöst

<select onchange="setTimeout(function(){alert('not broken!');},200)">
                <option value="one">One</option>
                <option value="two">Two</option>
            </select>

http://jsbin.com/iPuXiVA/4/

Anscheinend betrifft dieser Fehler das iPad und nicht das iPhone.

4
Marconi

Ich denke, dass ein Fehler mit der glatten Auswahl von Animationsfeldern zusammenhängt. Ich mag keine Hacks, aber diese Methode funktioniert. Die Bestätigung wurde nach 100 ms aufgerufen (dies reicht für die Zeit bis das Auswahlfenster geschlossen wird).

var object;

$('form select').change(function()
{
    object = $(this);
    timer = setTimeout(confirmation, 100);
});

function confirmation()
{
    switch(object.val())
    {
        case 'post_approved':
        case 'post_delete':
        case 'thread_delete': object.parent('form').find('input[name=id]').val(object.parent('form').find('input[name=post_id]').val()); break;
        case 'user_delete_all': object.parent('form').find('input[name=id]').val(object.parent('form').find('input[name=user_id]').val()); break;
        default: return false; break;
    }

    if(object.parent('form').find('input[name=act]').val() === 'post_approved'  || (object.parent('form').find('input[name=act]').val() != '' && confirm('Вы уверены?')))
        object.parent('form').submit();
    else
        return false;
}
0
Boris

Andersen ist richtig: 

javascript-Alarme () und Confirm () behoben, die ab iOS7.0.3 behoben wurden

ich habe es gerade selbst installiert und getestet. 

Während Apple das Problem korrigierte, suchte ich nach etwas, das zu umgehen war, und schließlich fand ich ein js-Plugin namens Alertify, von dem ich dachte, dass es sich lohnt zu teilen. Ich denke, ich werde es ab jetzt verwenden, unabhängig von der Fehlerbehebung! Es macht nur Warnungen, Aufforderungen usw. wirklich sehr gut aus. Ich dachte, es lohnte sich zu teilen, da Leser dieses Posts wahrscheinlich die Standard-Browser-Alarme verwenden. Ich war begeistert, darüber zu stolpern. 

0
DaNnY BoY