Backbone: Excepción DOM 18 en navegar () en Safari 9.1

Creado en 13 may. 2016  ·  11Comentarios  ·  Fuente: jashkenas/backbone

SecurityError: Safari lanza la excepción DOM 18 (iOS y OSX) desde el momento en que pushState() se llama 100 veces.

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

falla con:

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

Todos 11 comentarios

El enlace del foro de desarrolladores de Apple que publicaste parece sugerir que este problema está relacionado con Safari. ¿Qué quieres que haga Backbone al respecto?

backbone necesita solucionar el error del navegador.

¿Hay alguna solución que conozca @zowers? ¿Este error solo ocurre si se llama a navegar 100 veces sincrónicamente o sucederá si se llama 100 veces en general?

para solucionarlo, tuve que envolver navegar en un try/catch
en safari 9.1 (último estable a partir de hoy) - 100 veces en total
en la vista previa para desarrolladores de safari 9.1.1: es 100 veces en 30 segundos

¿por qué no se arregla?
¿Dices que es aceptable tener una funcionalidad que no funciona?

Lo puse allí porque al leer el error de safari no vi una solución aceptable. Usar un intento/atrapar y no cambiar la ruta después del cambio número 100 no es aceptable en mi opinión

Usar un intento/atrapar y no cambiar la ruta después del cambio número 100 no es aceptable en mi opinión

Acordado. Esa es una falla silenciosa, que es peor que el comportamiento actual.

probablemente navegar debería recurrir al hash en caso de error

hoy se lanzó safari 9.1.1 con la corrección
en safari safari 9.1.1 history.pushState() falla solo si se llama 100 veces en 30 segundos

¿cerrado? esperando que la gente reciba la actualización pronto?

Este es un error en Safari sin mucho que podamos hacer. Dado que 9.1 solo ha estado disponible durante 2 meses, creo que estamos seguros de no hacer nada y dejar que la gente se actualice.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

thesmart picture thesmart  ·  22Comentarios

miguelpayet picture miguelpayet  ·  9Comentarios

gfranko picture gfranko  ·  18Comentarios

etler picture etler  ·  13Comentarios

rubiii picture rubiii  ·  12Comentarios