3

编辑:由于这个问题现在已经“解决”到可以工作的地步,我正在寻找有关原因的信息。有关修复,请参阅下面的我的评论。

我有一个 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 调用。

4

3 回答 3

4

老问题,但供将来参考:据我的经验,文件下载不需要 onLoad。解决它的一种方法是像他们在这里一样使用cookie http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser/

于 2012-08-16T05:51:28.177 回答
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 文件,而不是一个音频文件,所以这可能会有所不同。

于 2010-03-24T19:53:12.507 回答
0

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

于 2010-03-28T19:34:00.540 回答