Backbone: DOM-Ausnahme 18 bei navigation() in Safari 9.1

Erstellt am 13. Mai 2016  ·  11Kommentare  ·  Quelle: jashkenas/backbone

SecurityError: DOM Exception 18 wird von Safari (iOS und OSX) ausgelöst, sobald pushState() 100 Mal aufgerufen wird.

https://forums.developer.apple.com/thread/36650
Geige: https://jsfiddle.net/n3uxkyhr/5/

var TestRouter = Backbone.Router.extend( {
    initialize: function() {
        this.route("/test/:id", function( id ) { console.log("test" + id) });
    }
} );
var router = new TestRouter();
Backbone.history.start({pushState: true});

try {
  for(var i = 0; i < 200; i++ ) {
      router.navigate("/test/"+i);
    }
    alert("passed, i = " + i);
} catch( e ) {
    var msg = "failed on i " + i + " with error: " + e + "\nStack: " + e.stack;
  console.error( e, msg );
  alert(msg);
}

scheitert mit:

failed on i 100 with error: Error: SecurityError: DOM Exception 18
Stack: pushState@[native code]
navigate<strong i="14">@https</strong>://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone.js:1823:69
navigate<strong i="15">@https</strong>://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone.js:1522:32
global code<strong i="16">@https</strong>://fiddle.jshell.net/n3uxkyhr/6/show/:63:22"
global code — show:68
wontfix

Alle 11 Kommentare

Der von Ihnen gepostete Link zum Apple-Entwicklerforum scheint darauf hinzuweisen, dass dieses Problem mit Safari zusammenhängt. Was soll Backbone dagegen tun?

backbone muss den Browser-Bug umgehen.

Gibt es eine Problemumgehung von @zowers? Tritt dieser Fehler nur auf, wenn navigieren 100-mal synchron aufgerufen wird, oder tritt er generell auf, wenn es 100-mal aufgerufen wird?

zur Problemumgehung musste ich navigieren in ein try/catch
in Safari 9.1 (letzter Stand heute) - insgesamt 100 mal
in Safari 9.1.1 Entwicklervorschau - 100 Mal in 30 Sekunden

warum wird es nicht behoben?
Sagen Sie, dass es akzeptabel ist, eine nicht funktionierende Funktionalität zu haben?

Ich habe das dort platziert, weil ich beim Lesen des Safari-Bugs keine akzeptable Lösung sah. Ein Try/Catch zu verwenden und die Route nach der 100. Änderung nicht zu ändern, ist IMO nicht akzeptabel

Ein Try/Catch zu verwenden und die Route nach der 100. Änderung nicht zu ändern, ist IMO nicht akzeptabel

Einverstanden. Das ist ein stiller Fehler, der schlimmer ist als das aktuelle Verhalten.

wahrscheinlich navigieren sollte im Fehlerfall auf Hash zurückgreifen

heute wurde Safari 9.1.1 mit dem Fix veröffentlicht
in Safari Safari 9.1.1 history.pushState() schlägt nur fehl, wenn 100 Mal in 30 Sekunden aufgerufen

abgeschlossen? in der Hoffnung, dass die Leute das Update bald bekommen?

Dies ist ein Fehler in Safari, an dem wir nicht viel tun können. Angesichts der Tatsache, dass 9.1 erst seit 2 Monaten auf dem Markt ist, denke ich, dass wir sicher sind, nichts zu tun und die Leute aktualisieren zu lassen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen