Windows Media Player не работает? У JS нет доступа к "элементам управления"?
Итак... Компания, в которой я работаю, уже давно использует оболочку javascript для контроля положения воспроизводимого видео.
Исторически это было достигнуто с помощью чего-то для этого:
function loadMovie(movieIndex, moviePosition)
{
if ( top.mediaFrame.document.MediaPlayer.URL != movieArray[movieIndex])
{
top.mediaFrame.document.MediaPlayer.URL = movieArray[movieIndex];
}
top.mediaFrame.document.MediaPlayer.controls.currentPosition = moviePosition;
top.mediaFrame.document.MediaPlayer.controls.play();
return false;
}
// I've tried .controls.currentPosition And .Controls.currentPosition to no avail.
Где объект MediaPlayer выглядит примерно так:
<OBJECT id="MediaPlayer" width="440" height="360" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" type="application/x-oleobject">
<param name="URL" value="/images/logo.png">
<param name="rate" value="1">
<param name="balance" value="0">
<param name="currentPosition" value="0">
<param name="defaultFrame" value>
<param name="playCount" value="1">
<param name="autoStart" value="-1">
<param name="currentMarker" value="0">
<param name="invokeURLs" value="-1">
<param name="baseURL" value>
<param name="volume" value="50">
<param name="mute" value="0">
<param name="uiMode" value="full">
<param name="stretchToFit" value="0">
<param name="windowlessVideo" value="0">
<param name="enabled" value="-1">
<param name="enableContextMenu" value="-1">
<param name="fullScreen" value="0">
<param name="SAMIStyle" value>
<param name="SAMILang" value>
<param name="SAMIFilename" value>
<param name="captioningID" value>
<param name="enableErrorDialogs" value="0">
<param name="_cx" value="10451">
<param name="_cy" value="10583">
<embed TYPE="application/x-mplayer2" SRC="/images/logo.png" NAME="MediaPlayer" WIDTH="440" HEIGHT="360" autostart="1" showcontrols="1">
</object>
В частности, проблема, с которой я сталкиваюсь, заключается в том, что любая попытка установить 'currentPosition' члена 'Controls' объекта 'MediaPlayer' приводит к следующему:
Uncaught TypeError: Cannot set property 'currentPosition' of undefined
Согласно ссылке на объектную модель, это должно работать. По историческим данным, это должно сработать - пока... совсем недавно. Если у кого-то есть идея, почему это перестало бы работать "на ровном месте", как это было в КАЖДОМ БРАУЗЕРЕ, НО IE, мне было бы очень интересно узнать, что это такое.
Я знаю, что этот подход серьезно устарел, но у меня нет возможности отойти от него, поскольку компания, в которой я работаю, имеет десятки тысяч часов видео в формате WMV, хотя поддержка WMV в браузерах быстро исчезает.
Начал сотрудничество в JSFiddle (спасибо @Bart).
2 ответа
Что ошибка говорит вам, что в то время как MediaPlayer
кажется определенным, MediaPlayer.Controls
не является.
Действительно, согласно http://msdn.microsoft.com/en-us/library/windows/desktop/dd562656%28v=vs.85%29.aspx Player
объекты имеют controls
свойство типа Controls
, Таким образом, вы должны написать
top.mediaFrame.document.MediaPlayer.controls.currentPosition = moviePosition;
top.mediaFrame.document.MediaPlayer.controls.play();
Я не думаю, что это медиаплеер.
Ваш JavaScript предполагает, что медиаплеер всегда загружается тегом объекта, и ссылается на него только по идентификатору тега объекта.
Если медиаплеер фактически загружен тегом embed, JavaScript не будет к нему обращаться.
Вам нужно дать явный идентификатор тегу встраивания, и если тег объекта на самом деле не содержит действительного медиаплеера, вам нужно вместо этого найти тег встраивания.
Что-то вроде:
var player = top.mediaFrame.document.getElementById('MediaPlayer);
if (! player || ! player.controls)
{
player = top.mediaFrame.document.getElementById('altMediaPlayer')
}
затем
<embed id = 'altMediaPlayer' TYPE="application/x-mplayer2" SRC="/images/logo.png" NAME="MediaPlayer" WIDTH="440" HEIGHT="360" autostart="1" showcontrols="1">
должен сделать это.