Javascript 动态创建的iframe用于下载文件触发器,该触发器是带firebug加载的,而不是不带firebug的

Javascript 动态创建的iframe用于下载文件触发器,该触发器是带firebug加载的,而不是不带firebug的,javascript,iframe,firebug,download,wav,Javascript,Iframe,Firebug,Download,Wav,编辑:由于这个问题现在已经“解决”到了可以工作的程度,我想知道原因。有关修复方法,请参见下面我的评论 我有一个web应用程序,它可以反复动态地(在超时后或按照用户的指示)将wav文件下载到iframe中,以触发默认音频播放器播放它们。应用程序仅针对FF 2或FF 3。为了确定文件何时完全下载,我希望使用iframe的window.onload处理程序。基于此,我每次都创建一个新的iframe。只要使用该应用程序在浏览器上启用firebug,一切都可以正常工作。如果没有firebug,onload

编辑:由于这个问题现在已经“解决”到了可以工作的程度,我想知道原因。有关修复方法,请参见下面我的评论

我有一个web应用程序,它可以反复动态地(在超时后或按照用户的指示)将wav文件下载到iframe中,以触发默认音频播放器播放它们。应用程序仅针对FF 2或FF 3。为了确定文件何时完全下载,我希望使用iframe的window.onload处理程序。基于此,我每次都创建一个新的iframe。只要使用该应用程序在浏览器上启用firebug,一切都可以正常工作。如果没有firebug,onload永远不会开火。firebug的版本是1.3.1,而我已经测试了Firefox 2.0.0.19和3.0.7。有没有办法在下载wav文件后,从iframe可靠地触发onload?或者是否有其他方式来表示下载完成?以下是相关代码:

HTML(hidden的唯一属性是display:none;):

我也尝试过通过document.createElement创建iframe,但发现了相同的行为。每次启用firebug时都会触发onload,并且在没有firebug的情况下不会触发

编辑:
修复了有关如何声明iframe和添加回调函数代码的信息。不,这里没有console.log调用。

这里有一个对我有效的示例,没有Firebug打开(在FF 3.6.2 Mac中测试):

我使用的是jQuery
.load()
事件,而不是
onload

var iframe = $("<iframe/>").load(function () {
    alert("loaded");
}).attr({
    src: "http://code.jquery.com/jquery-1.4.2.min.js"
}).appendTo($("#thediv"));
var iframe=$(“”)。加载(函数(){
警报(“已加载”);
})艾特先生({
src:“http://code.jquery.com/jquery-1.4.2.min.js"
})。附件($);

请注意,我加载的是一个JavaScript文件,而不是音频文件,因此这可能会有所不同。

也许您在某处调用了一些Firebug内部函数,比如console.log()?在这种情况下,Firefox将抛出一个异常,如果Firebug未激活,该异常可以停止执行。

旧问题,但供将来参考:
根据我的经验,文件下载不需要onLoad。解决这个问题的一种方法是像这里一样使用cookie,出于某种原因,获取iframe的contentDocument并在那里设置onload会触发HTML中的onload。我需要添加到容器的HTML中的onload和contentDocument.onload=call。如果您有任何想法,我们将不胜感激!如上所述,在评论中,通过在代码中设置onload并触摸content文档,我已经让音频文件中的所有内容都正常工作(Firebug不仅关闭,而且禁用,启用Firebug时,它始终正常工作)。谢谢你的建议,但是使用jQuery的加载函数不起作用-我试了很多次。我仍然在寻找一个解释,解释为什么在iFrame的contentDocument中设置onload可以让一切正常工作。我最好的猜测是,它导致加载事件被触发,因为contentDocument中设置了某些内容。链接不再可用!我可以在复制粘贴到新选项卡时打开链接。当引用url为此页面时,是否阻止此页面?:)
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;
function notifyLoaded() {
    waitingForFile = false; // (declared at beginning of the closure)
    $("#loading").addClass("hidden");
 }
var iframe = $("<iframe/>").load(function () {
    alert("loaded");
}).attr({
    src: "http://code.jquery.com/jquery-1.4.2.min.js"
}).appendTo($("#thediv"));