Backbone: DOM Exception 18 sur naviguer () dans Safari 9.1

Créé le 13 mai 2016  ·  11Commentaires  ·  Source: jashkenas/backbone

SecurityError : l'exception DOM 18 est levée par Safari (iOS et OSX) à partir du moment où pushState() est appelé 100 fois.

https://forums.developer.apple.com/thread/36650
violon : 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);
}

échoue avec :

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

Tous les 11 commentaires

Le lien du forum des développeurs Apple que vous avez posté semble suggérer que ce problème est lié à Safari. Que voulez-vous que le backbone fasse à ce sujet ?

backbone doit contourner le bogue du navigateur.

Connaissez-vous @zowers une solution de contournement ? Ce bogue ne se produit-il que si naviga est appelé 100 fois de manière synchrone ou se produira-t-il s'il est appelé 100 fois en général ?

pour contourner ce problème, j'ai dû envelopper la navigation dans un try/catch
dans safari 9.1 (dernière version stable à ce jour) - 100 fois au total
dans l'aperçu développeur de safari 9.1.1 - c'est 100 fois en 30 secondes

pourquoi ça ne va pas réparer?
dites-vous qu'il est acceptable d'avoir une fonctionnalité qui ne fonctionne pas ?

Je l'ai placé là car en lisant le bogue safari, je n'ai pas vu de solution acceptable. Utiliser un try/catch et ne pas changer la route après le 100ème changement n'est pas acceptable IMO

Utiliser un try/catch et ne pas changer la route après le 100ème changement n'est pas acceptable IMO

D'accord. C'est un échec silencieux, ce qui est pire que le comportement actuel.

naviguer devrait probablement se rabattre sur le hachage en cas d'erreur

aujourd'hui safari 9.1.1 avec le correctif a été publié
dans safari safari 9.1.1 history.pushState() échoue uniquement s'il est appelé 100 fois en 30 secondes

fermé? en espérant que les gens recevront la mise à jour bientôt?

Il s'agit d'un bug dans Safari sans que nous puissions faire grand-chose. Étant donné que la version 9.1 n'est disponible que depuis 2 mois, je pense que nous sommes sûrs de ne rien faire et de laisser les gens mettre à jour.

Cette page vous a été utile?
0 / 5 - 0 notes