2

Safari 5でpopStateがトリガーされたときにwindow.history.stateオブジェクトにアクセスできないようです(ページが戻ります)。このコードは、Chrome19とFirefox12で完全に機能します。

window.onload = function() {

     window.setTimeout(function() {

          var original = window.location.href;

          window.addEventListener("popstate", function(e) {

                    if (window.history.state !== null) {
                        var type = window.history.state.type;
                        var page = window.history.state.page;
                        //custom Ajax function below
                        getContent({type:type, page:page, category: category}, '/' + type + '/' + page);
                    } else {
                        window.location = original;
                    }

            }, false);

     }, 1);
}

Safari 5のconsole.log(window.history.state)は、「undefined」を返します。

4

2 に答える 2

3

window.history.state一部のブラウザでのみ使用できます。それ自体は仕様の一部ではありません。

Feature           │ Chrome  │ Firefox (Gecko)  │  IE  │ Opera  │ Safari
──────────────────┼─────────┼──────────────────┼──────┼────────┼───────
replace/pushState │   5     │    4.0 (2.0)     │  10  │ 11.50  │  5.0
history.state     │  18     │    4.0 (2.0)     │  10  │ 11.50  │  ---
于 2012-06-08T00:11:05.997 に答える
2

したがって、 history.state がサポートされている場合、値は null (またはブラウザーが状態を記憶している場合はオブジェクト) になり、それ以外の場合は未定義になります。そして、サポートされているかどうかを確認するために、このコードになりました

(window.history && history.pushState && history.state !== undefined) 
? true : false;

最新の Chrome、Safari 5、6、IE 9 でテスト済み

于 2012-11-05T16:34:30.567 に答える