Слушатели событий в HTML5 видео на iPad Safari не работает? - PullRequest
6 голосов
/ 14 июня 2010

Я получил это в <head>:

<script>
      function log(event){
     var Url = "./log.php?session=<?php echo session_id(); ?>&event=" + event;

        xmlHttp = new XMLHttpRequest(); 
        xmlHttp.open( "GET", Url, true );
        xmlHttp.send( null );

    }
</script> 

И это в <body>:

<video id="video" src="./video/LarryVideo.mp4" 
  controls="controls" 
  poster="./img/video_poster.jpg"
  onabort="log('onabort');"
  oncanplay="log('oncanplay');"
  oncanplaythrough="log('oncanplaythrough');"
  ondurationchange="log('ondurationchange');"
  onemptied="log('onemptied');"
  onended="log('onended');"
  onerror="log('onerror');"
  onloadeddata="log('onloadeddata');"
  onloadedmetadata="log('onloadedmetadata');"
  onloadstart="log('onloadstart');"
  onpause="log('onpause');"
  onplay="log('onplay');"
  onplaying="log('onplaying');"
  onprogress="log('onprogress');"
  onratechange="log('onratechange');"
  onreadystatechange="log('onreadystatechange');"
  onseeked="log('onseeked');"
  onseeking="log('onseeking');"
  onstalled="log('onstalled');"
  onsuspend="log('onsuspend');"
  ontimeupdate="log('ontimeupdate');"
  onvolumechange="log('onvolumechange');"
  onwaiting="log('onwaiting');">
    <script>
        QT_WriteOBJECT('./video/LarryVideo.mp4',
            '380px', '285px',           // width & height
            '',                         // required version of the ActiveX control, we're OK with the default value
            'scale', 'tofit',           // scale to fit element size exactly so resizing works
            'emb#id', 'video_embed',    // ID for embed tag only
            'obj#id', 'video_obj');     // ID for object tag only
    </script> 
</video>

Мой обычный Safari создает хорошие записи в лог-файле, как и ожидалось. Мобильное Safari от iPad, однако, ничего не делает.

Что может быть не так с этим?

Спасибо!

1 Ответ

38 голосов
/ 28 июня 2011

Мне также не удалось получить доступ к readystate на ipad, но вы можете получить другие события, которые более или менее позволяют вам определить состояние готовности.

var audio = new Audio("someSource.mp3");
    audio.play(); 
 /* you may need to use .load() depending on how the event was initiated */
    audio.addEventListener("canplay", handleCanPlay, false);
    audio.addEventListener("durationchange", handleDurationChange, false);

Но давайте поясним, что проблема в том, что Apple в значительной степени говорит всему чертову миру, что они неправильно используют интернет. Конечно, все ненавидят сайты, которые начинают воспроизводить музыку при второй загрузке, но затем Apple сходит с ума и уничтожает ЛЮБУЮ / ВСЕ буферизацию аудио / видео, которая явно не инициируется жестом пользователя, потому что Apple, очевидно, считает, что их пользователи слишком отсталые нажмите «назад», если сайт их беспокоит; Фанаты тоже согласны. Это в основном оставляет остальным нам взламывать дерьмо в наших приложениях, если мы решаемся пытаться управлять любыми звуковыми эффектами. Я знаю, что это не место для разглагольствования ... но я буду проклят, если создание ЛЮБОГО программного обеспечения, интересного и интерактивного в HTML5 на iPad, не будет одним лицевым пульсом за другим ... будь то ограничение в 5 МБ, просто вылетает браузер, если на странице есть * слишком много (по мнению Apple) изображений или сложность предварительно загружать какие-либо носители для улучшения пользовательского интерфейса - серьезно, за исключением блогов WordPress и RSS-ридеров, реализация HTML5 в мобильном Safari довольно бесполезна. И поэтому мечта о ценностном предложении HTML5 «создай один раз, играй где угодно» мертва, и мы возвращаемся к разработке собственных приложений… по крайней мере, это дает нам хорошую безопасность работы / rant

...