2009-07-30 56 views
0

我的應用程序有幾個標籤頁,只需切換可見內容。但是,該頁面還具有將頁面添加製表符的鏈接。此外,應用程序還會記錄(使用Cookie)在刷新頁面時您上次查看哪個選項卡(即使使用後退和前進按鈕,嚴格的緩存設置也會導致刷新)。JavaScript可以告訴通過後退按鈕或鏈接離開的區別嗎?

我的問題是,您第一次訪問這組頁面時,應該顯示第一個選項卡(Tab A)。然後,您單擊一個鏈接,並添加一個選項卡,並記住新選項卡(Tab B)。然而,如果你回擊,現在看起來它什麼也沒做,因爲它會記住並顯示你最近點擊的標籤(表B)。

如果您點擊轉發到新頁面,然後使用我們的應用程序歷史記錄返回到上一頁,則記住製表符B是可取的行爲。但是,如果您單擊「後退」按鈕,因爲您希望它再次顯示選項卡A,這是您首次抵達時的方式,這是不可取的。

我的問題是JavaScript onunload事件是否可以檢測到離開頁面與後退按鈕或其他方式之間的區別。此時,我希望它忘記它爲該頁面記住的任何標籤。

+0

你可以檢查歷史記錄,看看上一頁是否與你的相匹配? – 2009-07-30 18:17:31

回答

4

如果您嘗試檢測到的差異出現在用戶單擊鏈接並以其他方式從頁面導航離開頁面之間,則可以使用JavaScript檢測鏈接點擊,方法是將onclick事件處理程序附加到您要觀察點擊的每個鏈接上。

因此,如果onunload在沒有onclick第一次觸發時觸發,用戶將通過其他方式離開頁面,而不是點擊您的某個跟蹤鏈接。

<script type="text/javascript"> 
var links = document.getElementsByTagName('a'); 
for (var i = 0; i < links.length; i++) { 
    links[i].onclick = setGlobal; 
} 
function setGlobal() { 
    window.linkClicked = true; 
} 
window.onunload = function() { 
    if (typeof window.linkClicked === 'undefined' || !window.linkClicked) { 
     // they are leaving some other way than by clicking a link 
    } 
} 
</script> 

它,如果你已經對你的<a>標籤onclick事件,如果是這樣的話,我可以提供一種方式來做到這一點變得有點棘手。

當然,您還可以使用jQuery或其他JavaScript庫附加到所有onclick事件。

+0

創意答案,雖然在我的情況下不切實際。我們不僅有幾種不同的方式可以離開頁面,而是鏈接(主要是onclicks,還有表單提交),但是我們有很多鏈接,通過重構標籤記憶代碼可以更好地解決錯誤,而不是嘗試注入標誌進入頁面上的所有鏈接。 – Nicole 2009-07-30 17:49:36

0

瀏覽器記住在該頁面上進行的定時器(setTimeout調用)的狀態。

第一次加載頁面的onLoad將被調用,設置一個定時器,該定時器根據歷史記錄轉發到下一頁。如果你已經在最後一頁,沒有問題:D,如果不是,那麼它將被轉發。

對於IE來說,onLoad總是被調用,不管是否用後退按鈕,因此你可以把相同的代碼放在那裏。