2012-09-13 127 views
0

我在這裏看到了關於iframe onload的一些類似問題,但沒有任何工作適合我。隱藏的iframe onload事件

我有一個隱藏的iframe,我只用於用戶下載在我的服務器上動態創建的pdf。當用戶點擊一個按鈕時,通過指向一個控制器/操作以及查詢參數字符串,我的服務器上創建了pdf。

This works great。但是,當我按下此按鈕('BlockAndSpin'函數)時,我會顯示一個微調器並禁用UI。我想要隱藏微調器,並在pdf已經下載時重新啓用ui。

當我在Chrome和FF中調試時,我的onload方法從來沒有被打中。我也嘗試將onload屬性添加到iframe本身,並且這也不起作用。文件下載,但UI保持不變,onload事件不會觸發。

JS

function downloadPOS(id) { 
    var ifrm = document.getElementById(id) 
    BlockAndSpin(true); 
    ifrm.src = "/staticPOS/AddOrDownload" + GetPosQueryString(); 
    ifrm.onload = function() { 
     BlockAndSpin(false); 
    } 
} 

HTML

<iframe id="dlFrame" onload="BlockAndSpin(false);" style="display: none"></iframe> 

顯然,這無法做到的。我的回覆是由用戶下載的.pdf,並且不會將任何內容加載到iframe本身,因此它不會觸發該事件。我將不得不修改這是如何完成的。

+0

只是一個建議 - 如果AddOrDownload是一個頁面或者可以被一個頁面包裝,你的onload方法將被放置在那裏。 – kpcrash

+0

一個快速的[測試用例](http://jsfiddle.net/t28Nv/)顯示否則 - 'iframe' * does *調用'onload'屬性附加的'onload'處理程序。重新檢查您的代碼是否存在其他問題。 –

+0

1)它不是一個頁面,它是一個返回的pdf。 2)如果我註釋掉實際的下載src,它可以工作 - 但它必須與其他有關下載的內容相關。 – user576838

回答

0

我遇到了類似的問題,附加到隱藏的iframe上的消息。 IE似乎不喜歡與「隱藏」(顯示:無)iframe跨域通信。

我的解決方法是將iframe設置爲絕對位置,左值爲-9999px。然後它被有效地隱藏起來,你可以附加它。