2009-11-17 210 views
4

下面的JavaScript代碼有兩個步驟。如何等待location.href在JavaScript中完成?

步驟1:轉到.pdf,.doc,.exe或其他不是html本地的東西。如果location.href接管了瀏覽器窗口,則不需要執行步驟2.(PDF通常會接管瀏覽器窗口)。大多數其他事情啓動了一個下載管理器進程。如.exe。但是有一些東西,比如word文檔,可能是下載的,或者根據瀏覽器設置在瀏覽器窗口中顯示。我希望它能做到hef.location能做到的事情。

第2步:但是,如果它正在下載文件,如.exe,該過程完成後,然後轉到主頁。

或者在步驟1和步驟2之間等待5秒的解決方案似乎在大多數情況下都有效。但是在一個較慢的連接上它並不總是有效。然後進入首頁,沒有完成第一次href.location調用,他們從來沒有看到PDF,只看到主頁。

僅供參考...我將它們包裝在setTimeOut中的原因與此Firefox問題有關。 Stack Overflow: 864633 assigning-to-document-location-href-without-clobbering-history

我的問題:有沒有辦法告訴location.href進程何時完成?

<script language="JavaScript"><!-- 
function windowOnLoad() { 
    setTimeout(function(){ 
     location.href='/someurl/something.pdf'; //sometimes this is .doc file 
    },0); 
    setTimeout(function(){ 
     location.href='/homepage'; 
    },5000); 
    return false; 
} 
//--> 
</script> 
+0

你有PHP安裝? – powtac 2009-11-17 17:12:33

+0

除非使用ajax發佈請求,否則無法單獨使用javascript來完成此操作。閱讀它,它可能會有所幫助:http://stackoverflow.com/questions/1524487/browser-download-complete-event – Andrew 2009-11-17 22:12:22

回答

0

你有兩個選擇,據我可以告訴

  • 鏈接到文件中的彈出窗口(瀏覽器通常應該關閉這個自己,如果他們找到的唯一的事情是一個可下載的文件),並在同一時間重定向到目標頁面
  • 建立鏈接到目標頁面,並啓動下載還有一些動態的功能,但在你的情況可能不是有用

純JavaScript這是不可能和隧道下載救援人員到場呃服務器端腳本也不能處理重定向。你將不得不採取一種解決方案inbetween恐怕

2

我不相信這是可以做你在JavaScript問的問題。當你將某些東西設置爲window.location時,你基本上會告訴瀏覽器在當前窗口中加載指定的url。當瀏覽器確實停止了前一頁中的所有代碼的操作。

這裏是從我頭頂一對夫婦的可能性:

  • 負載在彈出的外部文件或一個新的窗口。我沒有嘗試過,所以我不確定它如何在所有瀏覽器中工作。
  • 使用您使用的任何服務器端語言來提供文件。您可以在提供文件後重定向客戶端。
1

正如其他人所說,Javascript沒有「onDownloadComplete」事件可用。但是,如果你是適合於顯示不同下載發生,可以使用以下方法:

  1. 第A,對網頁B的鏈接到網頁B
  2. ,顯示您希望向用戶展示,同時該文件被下載
  3. 網頁B的元素裏面的內容,增加實際開始下載一個META標籤,即

    <head> 
        <meta http-equiv="refresh" content="1;url=http://server.com/document.doc" /> 
    </head> 
    

最終結果是瀏覽器將繼續顯示來自(2)的內容,但還會通過「另存爲...」對話框提示用戶保存下載。

CNet和Sourceforge等許多下載網站都使用類似的技術。