2011-04-03 56 views
1

而不是直接鏈接到網站上下載的網站上,我們鏈接到一個頁面,說:「感謝您下載」。該頁面上有跟蹤代碼,因此我們知道有多少人下載了該文件。該頁面使用顯示的jQuery代碼啓動下載文件,這會在下載開始之前在頁面加載後添加一個短暫延遲。下載位置具有內容處置標題,因此它始終在瀏覽器中正確下載,並且可以看到「謝謝下載」頁面。這一切運作良好。自動下載行爲和後退按鈕問題

如果用戶繼續瀏覽此頁面,然後回來,則會出現問題。下載再次觸發。使用window.location.replace(href);似乎不能解決它。

這個問題由於傳遞頁面的CMS將其設置爲立即過期而未被緩存這一事實而變得更加複雜。 (i)避免這個問題的方法; (ii)處理文件下載/感謝頁面的更好方法?

jQuery代碼

$(document).ready(function() { 
    $('a.autoDownload').each(function() { 
     setTimeout('navigateToDownload("' + $(this).attr('href') + '")', 4000); 
    }); 
}); 

function navigateToDownload(href) { 
    document.location.href = href; 
} 

回答

1

那麼有一對夫婦來此解決方案。這裏有一個例子:

function navigateToDownload(href){ 
    var e = document.createElement("iframe"); 
    e.src=href; 
    e.style.display='none'; 
    document.body.appendChild(e); 
} 

其他的實現可能存在,但我懷疑他們不那麼「黑客」。

+0

我不明白這將如何解決他的問題? – Christian 2011-04-03 23:35:40

+0

而不是替換瀏覽器的歷史記錄,它附加一個iframe,它將開始下載文件。因此按照後面的按鈕功能按預期工作。 – Khez 2011-04-03 23:41:23

+0

我不確定它是否可以正常工作,因爲後退按鈕加載表單緩存 - 因此生成的HTML。 – Christian 2011-04-04 06:32:51

2

一種可能的方法是在頁面第一次加載時通過Javascript設置cookie。那麼,如果該頁面再次被加載,你可以檢查cookie的存在,如果存在,不要執行自動下載?

使用Cookie plugin for jQuery爲例:

$(document).ready(function() { 
    $('a.autoDownload').each(function() { 
     var hasDownloadedThisLink = $.cookie("site." + $(this).attr('id')); 
     if (!hasDownloadedThisLink) { 
      $.cookie("site." + $(this).attr('id'), "true"); 
      setTimeout('navigateToDownload("' + $(this).attr('href') + '")', 4000); 
     } 
    }); 
}); 

這僅僅是一個例子。如果你這樣做了,你必須考慮可能有多少可能的下載鏈接,因爲你可以設置多少cookie。另外請注意,我使用鏈接的id屬性在cookie中標識它們 - 我認爲這將更適合使用某種形式的href屬性。我還在前面加上了site.