Windows Media Player死了吗? JS无法访问' Controls'?

时间:2014-06-12 15:56:13

标签: javascript windows-media-player

所以...我工作的公司长期以来使用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>

我遇到的问题,特别是,任何尝试设置&#39; currentPosition&#39;控制&#39;媒体播放器的成员&#39;对象 - 产生以下内容:

Uncaught TypeError: Cannot set property 'currentPosition' of undefined

根据对象模型参考,这应该有效。根据历史记录,这应该有效 - 直到......最近。如果有人知道为什么这会停止工作&#39;突然出现&#39;就像在每个浏览器中一样,但是,我对它知道它是什么非常感兴趣。

我知道这种方法已被严重弃用,但我没有能力摆脱它,因为我工作的公司有数万小时的WMV格式视频,即使WMV的浏览器支持正在消失快。

在JSFiddle开始合作(感谢@Bart)。

http://jsfiddle.net/#&togetherjs=DvKifcxlR7

2 个答案:

答案 0 :(得分:1)

错误告诉您的是,MediaPlayer似乎已定义,MediaPlayer.Controls不是。

实际上,根据http://msdn.microsoft.com/en-us/library/windows/desktop/dd562656(v=vs.85).aspx Player个对象,controls属性类型为Controls。因此你应该写

top.mediaFrame.document.MediaPlayer.controls.currentPosition = moviePosition;
top.mediaFrame.document.MediaPlayer.controls.play();

答案 1 :(得分:0)

我不认为这是媒体播放器。

您的JavaScript假设媒体播放器始终由object标签加载,并且仅通过object标签的id引用它。

如果媒体播放器实际上是由embed标签加载的,那么JavaScript将无法访问它。

您需要为embed标记提供显式ID,如果object标签实际上不包含有效的媒体播放器,则需要找到嵌入标记。

类似的东西:

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">

应该这样做。