2013-04-11 89 views
2

我正在開發PHP,使用Curl來跟蹤鏈接到他們的最終目的地。我偶爾會使用元標記重定向或JavaScript重定向訪問一個頁面,並希望能夠足夠聰明地遵循它們。如果一個頁面有兩個,我應該關注哪個頁面(即哪個會先觸發)?元標記和JavaScript瀏覽器重定向 - 哪個優先?

樣品元標記刷新:

<meta http-equiv="refresh" content="0;URL='http://location1.com/'"> 

示例JavaScript刷新:

<script> 
window.location.href='http://location2.com/'; 
</script> 
+0

我認爲在某些情況下,這相當於一種競爭條件...有時一個會先發生,有時會發生另一個。我以前一直被這個咬傷。 – 2013-04-11 18:57:10

回答

7

剛剛創建該文件(我們稱之爲test.html

<html> 
    <head> 
    <meta http-equiv="refresh" content="0;URL='http://location1.com/'"> 
    <script type="text/javascript"> 
     window.location.href='http://location2.com/'; 
    </script> 
    </head> 
    <body> 
    Hello 
    </body> 
</html> 

您可以複製並保存。一旦你打開它,你就會被引導到http://location2.com

請注意,如果<script>標籤是不是在<head>標籤,該標籤<meta>首先得到執行。

1

我不認爲有一個很好的方法來檢測哪一個會先發射。

元標記具有可用於指定超時的content屬性。但是,在JavaScript中,幾乎不可能檢測重定向何時發生,因爲有無限的方式來編寫它。至少不是沒有執行它。例如:

var t = 100; 
setTimeout(function() { 
    window.location.href='http://location2.com/'; 
}, t * 2); 
3

Hexblot的回答是一個好主意 - 只是嘗試一下,如果你想看看會發生什麼。但是,當我嘗試了它,Chrome瀏覽器去了location2,IE瀏覽器去了location1。所以它似乎是實施依賴。您可能希望在腳本中具有可配置的選項。然而,在實踐中,任何一個站點在元標記中都有一個重定向,而在腳本中有一個不同的站點,(a)不太可能,(b)編碼不好,因爲他們不知道最終會在哪裏。

+0

我現在看到兩者都出現在頁面中時,meta標記通常被

+0

@MichaelB這是在我能想到的同一頁面上都具有唯一的半合理理由,並且目的地不同的可能性很小,因此您可以任意選擇一個,而沒有太大的風險。 – 2013-04-11 21:54:05