2012-06-08 38 views
2

當我在Safari 5中觸發我的popState(頁面返回)時,我似乎無法訪問window.history.state對象。此代碼完美適用於Chrome 19和Firefox 12.pushState&popState:Safari 5沒有返回window.history.state

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'。

+0

http://stackoverflow.com/questions/8439145/reading- window-history-state-object-in-webkit 這將用於你。 – Laughing

回答

3

window.history.state is only available in some browsers. It's not part of the spec per se.

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 │ --- 
+2

這是不正確的。它當然也可以在Chrome中使用。 – jeffhuber

+0

我剛剛在Chrome中進行了測試。它返回適當的對象。 – jeffhuber

+0

@qwertymk - 它也適用於Safari。 –

2

因此,如果被支撐history.state則該值將是無效(或如果瀏覽器是要記住的狀態的對象),否則這將是不確定的。我結束了這段代碼檢查無論是支持或不

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

經測試,在最新的Chrome,Safari瀏覽器5,6,IE 9

+0

這用於奇妙的工作,但[錯誤949471](https://bugzilla.mozilla.org/show_bug.cgi?id=949471)停止它在Firefox 26,也許27工作。 –