2015-09-26 44 views
0

目前,我使用POST表單下載文件:使用iframe來下載文件

var form = document.createElement("form"); 
var element1 = document.createElement("input"); 
var element2 = document.createElement("input"); 

form.target = "_blank"; 
form.method = "POST"; 
form.action = path; 

element1.value = authService.getToken(); 
element1.name = "Authorization"; 
form.appendChild(element1); 

element.append(form); 

form.submit(); 
element.empty(); 

爲了防止當前頁面的位置變化時,服務器不會發送正確的頭,我打開設置窗體的目標爲「_blank」,這樣如果發生錯誤,它會顯示在另一頁上。但這裏的問題在於瀏覽器在默認情況下會阻止新選項卡,並且我不想強制用戶允許這種行爲。我讀過,也有一個選項來指定iframe的id作爲目標。它會在我的情況下工作嗎?然後,我如何從iframe中讀取錯誤以顯示給用戶?

+0

你在發佈到你的網站嗎? – dandavis

+0

你能夠友善地搜索iframeupload,它完全符合你的需求..除了你允許下載的地方,它允許上傳。 –

+0

@dandavis,是的,我使用POST –

回答

1

我現在正在處理這個問題。我發現從iframe返回狀態的最佳答案是在其中設置一個cookie。理想情況下,cookie的名稱對於特定的下載事件(我使用guid)是唯一的,這兩個頁面都是已知的,其值可能是錯誤消息或成功爲空。父頁面然後在javascript中調查此cookie。如果出現錯誤,我確定下載url總是呈現cookie,因爲很難了解關於iframe狀態的任何其他信息。成功後,JS輪詢器可以隱藏「你的下載很快就會開始」的信息,並刪除co​​okie。失敗時,做那些並且顯示錯誤。

未解決的大問題是它的工作性能如何移動瀏覽器,彈出窗口對他們來說是一個糟糕的選擇,因爲他們大多都會默認阻止它們,但沒有任何提示......但是,iframe下載有一個用於iframe下載的jQuery插件,當它看到移動設備時,會跳回彈出窗口。

+0

謝謝,這是一個有趣的方法,你能提供一些代碼示例嗎? –

+0

也許,但最早到星期一纔有。 –

+0

好的,謝謝,讓我看看我是否自己弄清楚 –