2010-04-02 60 views
1

我有一個html頁面,當我點擊頁面上的文件鏈接時,彈出文件下載對話框,此文件對話框鎖定頁面。我的意思是沒有選擇其中一個選項(打開,保存,取消),我無法在頁面上執行任何操作(這是正常的)。我需要的是如果JavaScript可以檢查頁面是否被鎖定。 (或文件對話框是否彈出?)什麼時候文件下載對話框打開? - HTML,Javascript

ps.s.因爲服務器可能響應非常緩慢(如點擊後30秒)

+0

*「不要說」將onclick事件添加到鏈接「,因爲服務器可能響應非常緩慢(就像點擊後30秒)」* **服務器**將與它有什麼關係?當你選擇文件時,這都是客戶端。除非您提交表單,否則服務器不參與。 – 2010-04-02 11:32:50

+0

實際上,我點擊鏈接時提交表單,表單的響應是一個文件,而不是html文件。 – Feyyaz 2010-04-02 11:39:28

+0

您定位了哪個瀏覽器?我在IE,Firefox,Opera和Chrome上進行了測試。 Chrome是唯一一個「鎖定」網頁的網站。 – nemetroid 2010-04-02 11:40:08

回答

1

因爲頁面是鎖定,因此您無法對JavaScript執行任何操作,因爲您不能對JavaScript執行任何操作它也被鎖定。

但是,你想要做什麼?你是否想以某種方式記錄用戶正在下載文件的事實?如果是的話,有更好的方法來做到這一點,他們在服務器端。使用一些服務器端腳本語言來提供文件並記錄下載的事實。

如果這不是你想要做什麼,那麼唯一的方法是使用鏈接要麼onclickonunload/onbeforeunload,但這些都是不太可靠,我相信,你會發現在不同的瀏覽器完全不同的行爲。

實際上,現在我想起來了,還有一種方法,但是它很髒。我們的想法是設置每秒運行的時間間隔,並檢查兩次運行之間是否超過一秒。喜歡的東西:

var lastTime = new Date().getTime(); 
function checkTime() { 
    var curTime = new Date().getTime(); 
    if (curTime - lastTime > 1100) { // 1100 because there might be small browser lags 
     // do something after the dialog appeared and the user did something with it 
    } 
    lastTime = curTime; 
} 
setInterval(checkTime, 1000); 

請注意,有瀏覽器(Chrome操作系統是一個例子,我認爲),而打開該對話框不的頁面,所以這可能無法正常工作。如果你想要使用這個功能,一定要仔細檢查一下。

我現在得去洗個澡。

+0

骯髒的解決方案是如此聰明:)。謝謝。 – Feyyaz 2010-04-02 12:10:46

+0

不幸的是,該解決方案在IE6中無法使用。雖然這很聰明:)。 – Feyyaz 2010-04-02 12:55:58

+0

我可能只是需要對IE6進行一些調整(我不明白爲什麼它不會,除非IE6不阻止頁面)。也許IE6不知道'.getTime()'什麼的。它會給出任何錯誤嗎? – Felix 2010-04-02 13:13:07

3

如果你知道你的服務器返回下載一個文件,那麼你就可以猜測當對話框這個迂迴的技巧(這是我從一個計算器回答一個相關的問題,我問了)出現:

  1. 當你發出從頁面的HTTP請求,增加其價值,是一些隨機字符串參數(如"random" + new Date().getTime() —它並不一定是安全的,但要避免碰撞)

  2. 服務器尋找該段儀表。當它開始發送附件下載時,它會添加一個包含隨機字符串的cookie作爲其值。

  3. 現在,頁面發出HTTP請求後,它啓動一個間隔計時器。定時器功能中的代碼將檢查document.cookie尋找那個隨機字符串。只要document.cookie包含該字符串,那麼您就知道HTTP響應已將其發送給瀏覽器。由於您知道瀏覽器會要求用戶保存附件,因此您可以推斷出該文件對話框正在顯示。

我需要的是一種處理來自除直接用戶「點擊」以外的事件的文件附件的IE安全性的方法。我需要關閉一個模態對話框,所以我需要知道HTTP響應何時會返回。

+0

這是值得一試,我會告訴你關於嘗試後的結果。謝謝。 – Feyyaz 2010-04-02 15:05:16

相關問題