编辑:由于此问题现已“解决”到工作点,我希望获得有关原因的信息。有关此修复程序,请参阅下面的评论。
我有一个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调用。
答案 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将抛出一个可以停止执行的异常。