Backbone: Исключение DOM 18 при навигации() в Safari 9.1

Созданный на 13 мая 2016  ·  11Комментарии  ·  Источник: jashkenas/backbone

SecurityError: Исключение DOM 18 вызывается Safari (iOS и OSX) с момента вызова pushState() 100 раз.

https://forums.developer.apple.com/thread/36650
скрипка: 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);
}

терпит неудачу с:

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

Все 11 Комментарий

Ссылка на форум разработчиков Apple, которую вы разместили, кажется, предполагает, что эта проблема связана с сафари. Что вы хотите, чтобы магистраль делала по этому поводу?

Магистраль нуждается в обходе ошибки браузера.

Знаете ли вы обходной путь @zowers? Эта ошибка возникает только в том случае, если навигация вызывается 100 раз синхронно, или это произойдет, если она вызывается 100 раз в целом?

для обходного пути мне пришлось обернуть навигацию в try/catch
в сафари 9.1 (последняя стабильная на сегодняшний день) - всего в 100 раз больше
в Safari 9.1.1 Developer Preview - это 100 раз за 30 секунд

почему не исправит?
Вы говорите, что допустимо иметь неработающую функциональность?

Я разместил это там, потому что, читая ошибку сафари, я не видел приемлемого решения. Использование try/catch и отказ от изменения маршрута после 100-го изменения неприемлемо IMO

Использование try/catch и отказ от изменения маршрута после 100-го изменения неприемлемо IMO

Согласованный. Это тихий сбой, который хуже, чем текущее поведение.

вероятно, следует перейти к хешу в случае ошибки

сегодня вышел сафари 9.1.1 с исправлением
в сафари сафари 9.1.1 history.pushState() дает сбой, только если вызывается 100 раз за 30 секунд

закрыто? надеясь, что люди получат обновление в ближайшее время?

Это ошибка в Safari, и мы ничего не можем сделать. Учитывая, что версия 9.1 вышла всего 2 месяца, я думаю, что мы можем ничего не делать и позволять людям обновляться.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги