2013-03-04 64 views
2

看來,Android瀏覽器沒有正確實施window.location.replaceAndroid是否支持window.location.replace或任何等價物?

在大多數瀏覽器中,調用window.location.replace將用傳遞給它的URL替換當前URL。

當用戶在其他地方導航時,點擊返回,它們將被返回到傳遞給window.location.replace的URL,而不是他們在調用window.location.replace之前的URL。

Android瀏覽器似乎沒有正確實施。

在Android瀏覽器中,用戶將被引導回原始URL,而不是傳遞給window.location.replace的那個。您可以自己測試here

那麼在Android中重寫歷史記錄還有其他方法嗎?或者,對於Android用戶,我是否必須生活在沒有這種功能的情況下?

+1

嘗試document.location – ElefantPhace 2013-03-04 01:57:57

+0

@jonathanconway是否得到答案。在我的情況下,location.replace不會刪除以前的URL。如果你得到了答案,那麼請建議。 – 2014-03-04 04:52:34

回答

2

我有同樣的問題,並結束了類似於克里斯建議代碼,但我改變了if語句使用modernizr的特徵檢測。 如果你不使用Modernizr的代碼將是這個樣子:

if(!!(window.history && history.replaceState)){ 
    window.history.replaceState({}, document.title, base + fragment); 
} else { 
    location.replace(base + fragment); 
} 

除非你有一個設備檢測一個具體的理由,是優選的特徵檢測,因爲它基本上支持所有設備,甚至是未來的。

+0

我不明白「base」和「fragment」,你能更清楚地解釋一下嗎? – 2015-07-21 03:00:50

+0

我使用了Chris的例子中的base + fragment。但它只是一個帶有URL(相對或絕對)的字符串,您想添加到歷史記錄中。 – 2015-07-23 20:04:40

0

爲了讓它適用於所有/大多數移動平臺,請查看link

顯示如何處理Android,iPad和iPhone的重定向。

Android使用document.location而iOS的支持window.location.replace

+0

換句話說,Android不支持在歷史中保留以前的URL的情況下更改URL的方法? – Jonathan 2013-03-04 02:58:22

+0

我不確定,請嘗試類似[this](http://stackoverflow.com/questions/864633/assigning-to-document-location-href-without-clobbering-history),看看是否有幫助 – ElefantPhace 2013-03-04 03:03:17

+1

鏈接您發送的郵件不能解決問題。是的,它會重定向用戶並保留歷史記錄中的重定向網址。但原始網址仍保留在歷史記錄中。而我想徹底清除歷史記錄中的原始網址。看起來這在Android上是不可能的。 :( – Jonathan 2013-03-04 05:45:05

0

將這項工作?

document.location.href = 'http://example.com/somePage.html'; 
+0

.href不需要 – ElefantPhace 2013-03-04 02:05:16

+3

如果我只是想更改網址,這將起作用,但如果我想將先前的網址保留在瀏覽器歷史記錄之外,它將不起作用。上述解決方案將保留先前的網址 – Jonathan 2013-03-04 02:57:38

0

您可以嘗試使用歷史上的window.history的replaceState方法

 if (((navigator.userAgent.toLowerCase().indexOf('mozilla/5.0') > -1 && navigator.userAgent.toLowerCase().indexOf('android ') > -1 && navigator.userAgent.toLowerCase().indexOf('applewebkit') > -1) && !(navigator.userAgent.toLowerCase().indexOf('chrome') > -1))) { 
      window.history.replaceState({}, document.title, base + fragment); 
     } else { 
      location.replace(base + fragment); 
     } 
相關問題