Управление QuickTime фильм из JavaScript не работает в IE - PullRequest
1 голос
/ 20 октября 2011

У меня проблема с управлением быстродействующим фильмом из javascript.Я встраиваю видео в свою HTML-страницу, используя элемент <video> HTML5 - с откатом на quicktime, если браузер его не поддерживает (например, IE 8) (у меня есть определенное требование «no flash», но quicktime разрешен),Видео отображается во всплывающем окне;когда всплывающее окно закрывается, я хочу остановить воспроизведение видео.Я могу сделать это успешно в HTML5, но элемент управления QuickTime не работает.

Мой HTML выглядит так:

<video width="360" height="298" autobuffer="autobuffer" controls="controls" id="video" tabindex="0">
    <source type="video/mp4; codecs=&quot;avc1.42E01E, mp4a.40.2&quot;" src="/data/mmg-demo.mp4"></source>
    <source type="video/ogg" src="/data/mmg-demo.ogv"></source>
    <object width="360" height="298" id="videoem" codebase="http://www.apple.com/qtactivex/qtplugin.cab" classid="clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b">
        <param value="/data/mmg-demo.mp4" name="src">
        <param value="false" name="autoplay">
        <param value="true" name="controller">
        <embed width="360" height="298" name="videoem" pluginspage="http://www.apple.com/quicktime/download/" loop="false" controller="true" autoplay="false" src="../files/380/380523/video.mp4">
    </object>
</video>

Функция всплывающего окна закрытия JavaScript выглядит следующим образом:

function closePopup {
    //stop html5 playback if it's there
    if(typeof document.getElementById('video').pause == 'function') {
        document.getElementById('video').pause();
    }
    //stop playback of quicktime embed if it's there
    if(document.getElementById('videoem')) {
        document.getElementById('videoem').SetRate(0.0);
    }
    $('#demo-video').fadeOut();
}

Я тестировал точно такой же быстрый код в Firefox - и он отлично работает.Более того, примеры на других форумах, которые утверждают, что работают, не работают в IE 8 (например, см. http://lists.apple.com/archives/quicktime-api/2008/Mar/msg00187.html - не работает в IE 8).

Строка document.getElementById('videoem').SetRate(0.0) вызывает Object does not support this property or method ошибку.

Я не уверен, где еще искать.Любая помощь с благодарностью.

1 Ответ

1 голос
/ 01 ноября 2011

Хорошо, думаю, я понял это. Хитрость заключается в использовании идентификатора из элемента <embed>, а не элемента <object>. Итак, последний (рабочий) код, который я получил, это:

HTML:

<div id="mkt-video" style="position:fixed;width:360px;background-color:black;padding:10px;border:solid 2px white;display:none;z-index:100003">
    <video id="video" width="360" height="298" controls="controls" autobuffer="autobuffer">
        <source src="/data/mmg-demo.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' />
        <source src="/data/mmg-demo.ogv" type="video/ogg" />
        <object classid='clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b' width="360" height="298" codebase='http://www.apple.com/qtactivex/qtplugin.cab' id="videoem-object">
            <param name='src' value="/data/mmg-demo.mp4" />
            <param name='autoplay' value="false" />
            <param name='controller' value="true" />
            <param name="enablejavascript" value="true" />
            <embed src="../files/380/380523/video.mp4" width="360" height="298" autoplay="false" controller="true" loop="false" pluginspage='http://www.apple.com/quicktime/download/' name="videoem" id="videoem"></embed>
        </object>
    </video>
</div>

И Javascript:

function closeVideo() {
    if(typeof document.getElementById('video').pause == 'function') {
        document.getElementById('video').pause();
    }
    try {
        document.getElementById('videoem-object').SetRate(0.0);
    }
    catch (err) {}
    $('#mkt-video').fadeOut();
}

Требуется «try-catch», потому что IE9 по-прежнему создает объект для встраивания, но странного типа, и выдает ошибки некоторого странного содержимого. Во всяком случае, теперь он работает нормально.

...