2010-06-16 33 views
2

我有一個jQuery插件,用於在default.aspx asp.net頁面上動態創建和渲染表單,然後提交它。它被提交到的頁面是一個pdf.aspx頁面。該頁面構建PDF,然後使用Response.Write將文件(application/pdf)寫入瀏覽器。我使用相同的方法將XLSX文件呈現給瀏覽器。它的工作非常好,但我需要一個回調或某個事件來告訴按鈕何時停止旋轉。這可以防止用戶連續點擊Excel或PDF按鈕。有沒有人知道一種方法來檢測文件對話框窗口,當它不是使用JavaScript創建的?我也接受來自服務器端的其他回調方法。你能用Javascript來檢測一個文件下載窗口創建的服務器端嗎?

+0

請參閱http://stackoverflow.com/questions/666468/ie6-detecting-when-the-file-download-popup-is-closed/667281#667281 – 2010-06-16 17:00:20

+0

該解決方案聽起來不錯,但我不清楚加載件。無論iframe是在加載頁面時加載,還是在JS中動態創建,onload都會在表單提交之前發生。我錯過了什麼? – Zacho 2010-06-16 19:58:08

+0

[瀏覽器收到文件下載時檢測]可能的重複(http://stackoverflow.com/questions/1106377/detect-when-browser-receives-file-download) – Liam 2014-04-24 09:05:21

回答

4

我這樣做的方式是針對我前一段時間被T.J.提出的問題提出的。克勞德。我無法找到上次寫這篇文章的反應,因爲Stackoverflow的「搜索」功能非常令人難以置信,所以我可能會輸入一篇博文。基本思想是當你提交下載請求時,你的客戶端代碼(Javascript)應該附加一個額外的參數。該參數應該包含一些生成的隨機字符串(可能只是當前時間戳足夠好)。服務器然後查找該參數,當它準備好下載文件的響應時,它還會設置一個cookie併爲其提供隨機值。

在提交之後(或者之前;它並不重要),Javascript代碼應該啓動一個間隔定時器,並使用例程查看document.cookie的值並查看它是否包含該隨機字符串。只要cookie確實包含該字符串,就知道服務器已發回其響應,並且文件下載對話框已顯示。

+0

這很有趣。我昨天嘗試了這個確切的解決方案,因爲那是我想出的唯一解決方案。在服務器端設置Cookie後,我在客戶端使用以下命令查找它: setTimeout(complete = checkCookie(「fileComplete」),2000);每2秒鐘有一個 。這不起作用,因爲我無法讀取cookie客戶端。也許我會深入研究這個想法,並且今天再試一次。如果它有效,我會讓你知道。 – Zacho 2010-06-16 16:50:31

+0

那麼,如果你在客戶端組成一個隨機字符串,你甚至不需要尋找一個特定的cookie - 你可以看看「document.cookie」。另外,請確保您的服務器不會讓您的Cookie成爲「僅限http」,否則您的腳本無法看到它們!這項技術對我來說就像一個冠軍。 – Pointy 2010-06-16 17:47:42

相關問題