Backbone: Safari 9.1のnavigate()でのDOM例外18

作成日 2016年05月13日  ·  11コメント  ·  ソース: jashkenas/backbone

SecurityError: pushState()が100回呼び出された瞬間から、Safari(iOSおよびOSX)によってDOM例外18がスローされます。

https://forums.developer.apple.com/thread/36650
フィドル: https

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
wontfix

全てのコメント11件

あなたが投稿したアップルデベロッパフォーラムのリンクは、この問題がサファリにあることを示唆しているようです。 これについてバックボーンに何をしてもらいたいですか?

バックボーンはブラウザのバグを回避する必要があります。

@zowersを知っている回避策はありますか? このバグは、navigateが同期的に100回呼び出された場合にのみ発生しますか、それとも一般に100回呼び出された場合に発生しますか?

回避策として、ナビゲートをtry/catchラップする必要がありました
サファリ9.1(今日の時点で最新の安定版)-合計100倍
サファリ9.1.1開発者プレビューで-30秒で100回

なぜ修正されないのですか?
機能しない機能があっても問題ないと思いますか?

サファリのバグを読んだので、許容できる解決策が見つからなかったので、そこに配置しました。 try / catchを使用し、100回目の変更後にルートを変更しないことは受け入れられませんIMO

try / catchを使用し、100回目の変更後にルートを変更しないことは受け入れられませんIMO

同意しました。 これはサイレント障害であり、現在の動作よりも悪いです。

エラーが発生した場合は、おそらくナビゲートしてハッシュにフォールバックする必要があります

本日、修正されたサファリ9.1.1がリリースされました
in safari safari 9.1.1 history.pushState()は、30秒間に100回呼び出された場合にのみ失敗します

閉まっている? 人々がすぐにアップデートを入手することを望んでいますか?

これはSafariのバグであり、私たちにできることはあまりありません。 9.1がリリースされてから2か月しか経っていないことを考えると、何もせずに人々に更新を許可しても安全だと思います。

このページは役に立ちましたか?
0 / 5 - 0 評価