2010-03-16 22 views
2

編輯:因爲這個問題現在「解決」的工作點,我期待有關於爲什麼的信息。有關修正,請參閱下面的評論。動態創建的iframe用於下載文件觸發器onload與螢火蟲但不是沒有

我有一個web應用程序,它可以動態地(在超時之後或按照用戶的指示)下載wav文件到iframe中,以觸發默認音頻播放器播放它們。應用程序僅針對FF 2或3.爲了確定文件何時完全下載,我希望爲iframe使用window.onload處理程序。基於this stackoverflow.com answer我每次創建一個新的iframe。只要使用該應用程序在瀏覽器上啓用了螢火蟲,一切都很好。沒有螢火蟲,onload不會開火。螢火蟲的版本是1.3.1,而我測試了Firefox 2.0.0.19和3.0.7。任何想法如何從iframe中獲取onload以便在wav文件下載時可靠地觸發?或者有另一種方式來表示完成下載?下面是相關代碼:

HTML(隱藏的唯一屬性顯示:無;):

<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"); 
} 

我也曾嘗試創建iframe通過document.createElement,但我發現了相同的行爲。 onload每次觸發螢火蟲時都會觸發,從來沒有它。

編輯: 修復了關於如何聲明iframe並添加回調函數代碼的信息。不,沒有console.log在這裏調用。

+0

出於某種原因,獲取iframe的contentDocument並設置onload會導致觸發HTML中的onload。我需要在HTML中添加到容器的onload和contentDocument.onload =調用。任何想法爲什麼會感激! – justkt 2010-03-17 14:11:49

回答

0

下面是對我的作品,沒有螢火蟲開一個例子(FF 3.6.2的Mac測試):http://www.jsfiddle.net/Kukry/

我使用jQuery​​事件,而不是onload

var iframe = $("<iframe/>").load(function() { 
    alert("loaded"); 
}).attr({ 
    src: "http://code.jquery.com/jquery-1.4.2.min.js" 
}).appendTo($("#thediv")); 

請注意,我正在加載JavaScript文件,而不是音頻文件,因此可能會有所作爲。

+0

如上所述,在音頻文件中,通過在代碼中設置onload並觸摸內容文檔,我已經完成了所有工作(使用Firebug不僅關閉,而且禁用了Firebug,它始終可用)。感謝您的建議,但使用jQuery的加載功能不起作用 - 我多次嘗試。 我仍然在尋找一個解釋,爲什麼設置iFrame的contentDocument中的onload使所有工作都成功。我最好的猜測是它導致加載事件被觸發,因爲contentDocument中設置了一些東西。 – justkt 2010-03-25 12:48:56

0

也許你在某處調用了一些Firebug內部函數,如console.log()?在這種情況下,如果Firebug未處於活動狀態,Firefox將引發異常,從而停止執行。

+0

請參閱編輯。我沒有使用console.log。 – justkt 2010-03-28 20:52:30