Javascript Windows Media Player是否已死亡?JS无法访问';控件';?

Javascript Windows Media Player是否已死亡?JS无法访问';控件';?,javascript,windows-media-player,Javascript,Windows Media Player,所以。。。我工作的公司长期以来一直使用javascript包装器来控制正在播放的视频的位置 从历史上看,这是通过使用某种东西来实现的: function loadMovie(movieIndex, moviePosition) { if ( top.mediaFrame.document.MediaPlayer.URL != movieArray[movieIndex]) { top.mediaFrame.document.MediaPlayer.URL = mo

所以。。。我工作的公司长期以来一直使用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>
根据对象模型引用,这应该是可行的。根据历史记录,这应该是有效的-直到。。。最近。如果有人知道为什么这会像在每个浏览器中一样“突然”停止工作,但我很想知道它是什么

我知道这种方法已被严重弃用,但我无法摆脱它,因为我工作的公司有数万小时的WMV格式视频,尽管浏览器对WMV的支持正在迅速消失

在JSFiddle开始协作(谢谢@Bart)


错误告诉您的是,虽然似乎定义了
MediaPlayer
,但没有定义
MediaPlayer.Controls

实际上,根据
Player
的说法,对象具有
controls
类型的
controls
属性。你应该这样写

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

我不认为是媒体播放器的问题

您的JavaScript假定媒体播放器始终由对象标记加载,并且仅通过对象标记的id引用它

如果媒体播放器实际上是由嵌入标记加载的,JavaScript将不会访问它

您需要为嵌入标记提供一个显式id,如果对象标记实际上不包含有效的媒体播放器,则需要找到嵌入标记

比如:

var player = top.mediaFrame.document.getElementById('MediaPlayer);
if (! player || ! player.controls) 
{
    player = top.mediaFrame.document.getElementById('altMediaPlayer')
}
然后



应该这样做。

考虑使用HTML5而不是依赖插件。如果你在@Dave Newton决定删除我的评论之前读过我的原始帖子,你会注意到我无意立即离开(这真的不是一个选项),但是感谢您的建议。错误似乎表明,当
MediaPlayer
存在时,
MediaPlayer.Controls
不存在。您确定它不是MediaPlayer。控件吗?在javascript中,属性通常是小写的。再说一遍,我不知道API,所以我可能是错的;对象模型引用声明它是大写的。根据
控件
应该是小写的。你在引用哪个网站?@DigitalJedi805你还收到同样的错误吗?net是的,每个大小写组合都会产生相同的结果。只需在JSFIDLE中运行它,就会得到相同的结果@DigitalJedic805我刚刚在本地试用过,并且
document.MediaPlayer.controls.currentPosition=moviePosition没有错误…@DigitalJedi805啊,没有注意到。嗯,我的其他浏览器没有WMP插件,而是使用VLC媒体播放器插件(毫无疑问,它使用了不同的API)。事实上,在chrome中使用WMP已经不可能了,这可能是你的问题吧?
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">