почему javascript document.write не работает в Firefox?

1

У меня есть html-страница, отображающая изображение. он должен задерживаться, меняться на видео, а затем после воспроизведения видео менять изображение. это javascript, который я использую:

<script type="text/javascript">
function playVideo(){
var str='**html of the video object**';
document.open();
document.write(str);
document.close();
}
function backToImage(){
var str='**html of the image**';
document.open();
document.write(str);
document.close();
}
setTimeout("playVideo()",1000);
setTimeout("backToImage()",3000);

</script>

этот javascript работает в Chrome и Safari. В основном он работает в IE (второй тайм-аут не работает, но я только что открыл это). Это совсем не работает в Firefox. Нет задержек, видео просто начинает играть, и я никогда не вижу изображения; до или после.

любые мысли об этом были бы замечательными.

edit: так кажется, что document.write виноват. меняя название, чтобы отразить это.

если мой первоначальный вопрос не был ясен, я ищу, чтобы заменить изображение на видео, а затем заменить видео на изображение. это вся загрузка в iframe, поэтому мне нужно использовать document.write(или что-то вроде этого), чтобы на самом деле изменить html.

  • 0
    @slomojo: Строки вызовов функций будут работать нормально до тех пор, пока функции определены глобально, какими они кажутся.
  • 0
    Ах, я вижу, что это был документ, который напортачил.
Теги:
firefox

2 ответа

5

Использование document.write после того, как страница уже загружена, немного странно. Это нужно использовать только для создания страницы при ее загрузке. Попробуйте что-то вроде этого:

<html>
  <head>
    <script type="text/javascript">

      function playVideo(){
        var str='**html of the video object**';
        document.getElementById('video-placeholder').innerHTML = str;
      }
      function backToImage(){
        var str='**html of the image**';
        document.getElementById('image-placeholder').innerHTML = str;
      }
      setTimeout(playVideo, 1000);
      setTimeout(backToImage, 3000);

    </script>
  </head>
  <body>
    <div id="video-placeholder"></div>
    <div id="image-placeholder"></div>
  </body>
</html>
  • 0
    Я не думаю, что вы понимаете. Я хочу использовать document.write, чтобы заменить изображение на видео. а затем заменить видео с изображением. если я читаю это правильно, это просто покажет им обоим.
  • 0
    @psolms, вы можете использовать один div и настроить его для обеих функций.
Показать ещё 1 комментарий
3

Наиболее вероятная проблема заключается в том, что открытие/запись и закрытие документа полностью очищает его, очищая текущие тайм-ауты и в процессе.

Как указано в Document Object Model HTML

Открыть
    Откройте поток документов для записи. Если документ существует в target, этот метод очищает.

Так как firefox реализовал четкую часть (полную очистку)

  • 0
    +1 Имеет смысл для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню