Динамически создаваемый iframe, используемый для загрузки файлов, запускает загрузку с помощью firebug, но не без - PullRequest
3 голосов
/ 16 марта 2010

РЕДАКТИРОВАТЬ : поскольку эта проблема теперь "решена" до точки работы, я хочу получить информацию о том, почему. Для исправления см. Мой комментарий ниже.

У меня есть веб-приложение, которое многократно загружает файлы wav динамически (после тайм-аута или в соответствии с инструкциями пользователя) в iframe для запуска воспроизведения по умолчанию аудиоплеером. Приложение предназначено только для FF 2 или 3. Чтобы определить, когда файл загружен полностью, я надеюсь использовать обработчик window.onload для iframe. На основании ответа на stackoverflow.com Я создаю новый iframe каждый раз. Пока firebug включен в браузере с помощью приложения, все работает отлично. Без firebug, нагрузка никогда не срабатывает. Версия firebug - 1.3.1, в то время как я тестировал Firefox 2.0.0.19 и 3.0.7. Любые идеи, как я могу получить нагрузку от iframe, чтобы надежно активировать, когда файл 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");
 }

Я также пытался создать iframe с помощью document.createElement, но обнаружил то же поведение. Onload срабатывает каждый раз с включенным firebug и никогда без него.

EDIT: Исправлена ​​информация о том, как объявляется iframe, и добавлен код функции обратного вызова. Нет, никаких вызовов console.log здесь нет.

Ответы [ 3 ]

4 голосов
/ 16 августа 2012

Старый вопрос, но для дальнейшего использования: Насколько мне известно, onLoad не требует загрузки файлов. Чтобы решить эту проблему, используйте куки, как они делают здесь http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser/

0 голосов
/ 28 марта 2010

Может быть, вы вызываете какую-нибудь внутреннюю функцию Firebug, например console.log (), где-нибудь? В этом случае Firefox выдаст исключение, которое может остановить выполнение, если Firebug не активен.

0 голосов
/ 24 марта 2010

Вот пример, который работает для меня без открытого 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, а не аудиофайл, так что это может изменить ситуацию.

...