[英]Dynamically created iframe used to download file triggers onload with firebug but not without
編輯 :因為這個問題現在“解決”到工作的角度,我希望得到有關原因的信息。 有關此修復程序,請參閱下面的評論。
我有一個Web應用程序,它可以動態地(在超時后或用戶指示的情況下)將wav文件重復下載到iframe中,以便觸發默認音頻播放器播放它們。 應用程序僅針對FF 2或3.為了確定何時完全下載文件,我希望使用iframe的window.onload處理程序。 根據這個stackoverflow.com回答,我每次都會創建一個新的iframe。 只要使用應用程序在瀏覽器上啟用了firebug,一切都很好。 沒有螢火蟲,onload永遠不會發射。 firebug的版本是1.3.1,而我測試的是Firefox 2.0.0.19和3.0.7。 任何想法如何從iframe獲取onload以在wav文件下載時可靠地觸發? 或者是否有其他方式表明下載完成? 這是相關的代碼:
HTML(隱藏的唯一屬性是display:none;):
<div id="audioContainer" class="hidden">
</div>
JavaScript(也可以使用jQuery,但innerHTML比我讀過的html()更快):
waitingForFile = true; // (declared at the beginning of closure)
$("#loading").removeClass("hidden");
var content = "<iframe id='audioPlayer' name='audioPlayer' src='" +
/path/to/file.wav + "' onload='notifyLoaded()'></iframe>";
document.getElementById("audioContainer").innerHTML = content;
而且notifyLoaded的內容:
function notifyLoaded() {
waitingForFile = false; // (declared at beginning of the closure)
$("#loading").addClass("hidden");
}
我也嘗試通過document.createElement創建iframe,但我發現了相同的行為。 每次啟用firebug時都會觸發onload,永遠不會沒有它。
編輯:修復了有關如何聲明iframe的信息並添加了回調函數代碼。 不,這里沒有console.log調用。
舊問題,但供將來參考:至於我的onLoad經驗不需要文件下載。 解決問題的方法是使用像他們這樣做的cookie http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser/
這是一個適用於我的示例,沒有Firebug打開(在FF 3.6.2 Mac中測試): http : //www.jsfiddle.net/Kukry/
我正在使用jQuery .load()
事件而不是onload
。
var iframe = $("<iframe/>").load(function () {
alert("loaded");
}).attr({
src: "http://code.jquery.com/jquery-1.4.2.min.js"
}).appendTo($("#thediv"));
請注意,我正在加載JavaScript文件,而不是音頻文件,因此可能會有所不同。
也許你在某個地方調用一些Firebug內部函數,比如console.log()? 在這種情況下,如果Firebug不活動,Firefox將拋出異常,可以停止執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.