我有一個html頁面,當我點擊頁面上的文件鏈接時,彈出文件下載對話框,此文件對話框鎖定頁面。我的意思是沒有選擇其中一個選項(打開,保存,取消),我無法在頁面上執行任何操作(這是正常的)。我需要的是如果JavaScript可以檢查頁面是否被鎖定。 (或文件對話框是否彈出?)什麼時候文件下載對話框打開? - HTML,Javascript
ps.s.因爲服務器可能響應非常緩慢(如點擊後30秒)
我有一個html頁面,當我點擊頁面上的文件鏈接時,彈出文件下載對話框,此文件對話框鎖定頁面。我的意思是沒有選擇其中一個選項(打開,保存,取消),我無法在頁面上執行任何操作(這是正常的)。我需要的是如果JavaScript可以檢查頁面是否被鎖定。 (或文件對話框是否彈出?)什麼時候文件下載對話框打開? - HTML,Javascript
ps.s.因爲服務器可能響應非常緩慢(如點擊後30秒)
因爲頁面是鎖定,因此您無法對JavaScript執行任何操作,因爲您不能對JavaScript執行任何操作它也被鎖定。
但是,你想要做什麼?你是否想以某種方式記錄用戶正在下載文件的事實?如果是的話,有更好的方法來做到這一點,他們在服務器端。使用一些服務器端腳本語言來提供文件並記錄下載的事實。
如果這不是你想要做什麼,那麼唯一的方法是使用鏈接要麼onclick
或onunload
/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操作系統是一個例子,我認爲),而打開該對話框不塊的頁面,所以這可能無法正常工作。如果你想要使用這個功能,一定要仔細檢查一下。
我現在得去洗個澡。
如果你知道你的服務器返回下載一個文件,那麼你就可以猜測當對話框這個迂迴的技巧(這是我從一個計算器回答一個相關的問題,我問了)出現:
當你發出從頁面的HTTP請求,增加其價值,是一些隨機字符串參數(如"random" + new Date().getTime()
—它並不一定是安全的,但要避免碰撞)
服務器尋找該段儀表。當它開始發送附件下載時,它會添加一個包含隨機字符串的cookie作爲其值。
現在,頁面發出HTTP請求後,它啓動一個間隔計時器。定時器功能中的代碼將檢查document.cookie
尋找那個隨機字符串。只要document.cookie
包含該字符串,那麼您就知道HTTP響應已將其發送給瀏覽器。由於您知道瀏覽器會要求用戶保存附件,因此您可以推斷出該文件對話框正在顯示。
我需要的是一種處理來自除直接用戶「點擊」以外的事件的文件附件的IE安全性的方法。我需要關閉一個模態對話框,所以我需要知道HTTP響應何時會返回。
這是值得一試,我會告訴你關於嘗試後的結果。謝謝。 – Feyyaz 2010-04-02 15:05:16
*「不要說」將onclick事件添加到鏈接「,因爲服務器可能響應非常緩慢(就像點擊後30秒)」* **服務器**將與它有什麼關係?當你選擇文件時,這都是客戶端。除非您提交表單,否則服務器不參與。 – 2010-04-02 11:32:50
實際上,我點擊鏈接時提交表單,表單的響應是一個文件,而不是html文件。 – Feyyaz 2010-04-02 11:39:28
您定位了哪個瀏覽器?我在IE,Firefox,Opera和Chrome上進行了測試。 Chrome是唯一一個「鎖定」網頁的網站。 – nemetroid 2010-04-02 11:40:08