动态创建的iframe用于使用firebug下载文件触发器onload但不是没有

时间:2010-03-16 17:34:40

标签: javascript iframe firebug download wav

编辑:由于此问题现已“解决”到工作点,我希望获得有关原因的信息。有关此修复程序,请参阅下面的评论。

我有一个Web应用程序,它会动态地(在超时后或用户指示的情况下)将wav文件重复下载到iframe中,以便触发默认音频播放器播放它们。应用程序仅针对FF 2或3.为了确定何时完全下载文件,我希望使用iframe的window.onload处理程序。基于this stackoverflow.com answer我每次都会创建一个新的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,但是我读过的内部HTML比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调用。

3 个答案:

答案 0 :(得分:4)

旧问题,但供将来参考: 至于我的onLoad经验并没有调用文件下载。解决问题的方法是使用像http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser/

那样的Cookie

答案 1 :(得分:0)

这是一个适用于我的示例,没有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文件,而不是音频文件,因此可能会有所不同。

答案 2 :(得分:0)

也许你在某个地方调用一些Firebug内部函数,比如console.log()?在这种情况下,如果Firebug不活动,Firefox将抛出一个可以停止执行的异常。