【问题标题】:Is Windows Media Player dead? JS has no access to 'Controls'?Windows Media Player 死了吗? JS 无法访问“控件”?
【发布时间】:2014-06-12 15:56:13
【问题描述】:

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

我遇到的具体问题是,任何设置“MediaPlayer”对象的“Controls”成员的“currentPosition”的尝试都会产生以下结果:

Uncaught TypeError: Cannot set property 'currentPosition' of undefined

根据对象模型参考,这应该有效。根据历史记录,这应该有效 - 直到......最近。如果有人知道为什么这会“突然”停止工作,因为它在每个浏览器中都是如此,但我很想知道它是什么。

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

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

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

【问题讨论】:

  • 考虑使用 HTML5 &lt;video&gt; 而不是依赖插件。
  • 如果您在@Dave Newton 决定删除我的评论之前阅读了我的原始帖子,您会注意到我无意立即摆脱这一点(这真的不是一个选择),但谢谢你的建议。
  • 该错误似乎表明MediaPlayer 存在,MediaPlayer.Controls 不存在。你确定不是MediaPlayer.controls?在 javascript 中,属性通常是小写的。再说一次,我不知道 API,所以我可能是错的。
  • 我已经尝试过大多数变体大写和小写;对象模型引用声称它是大写的。
  • 根据msdn.microsoft.com/en-us/library/windows/desktop/…controls应该是小写。你指的是哪个网站?

标签: javascript windows-media-player


【解决方案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();

【讨论】:

  • @DigitalJedi805 你还遇到同样的错误吗? jsfiddle.net
  • 是的,大写或小写的每种组合都会产生相同的结果。
  • 只是通过 JSFiddle 运行它并得到相同的结果。 jsfiddle.net/#&togetherjs=DvKifcxlR7
  • @DigitalJedi805 我刚刚在本地尝试过,document.MediaPlayer.controls.currentPosition = moviePosition; 可以正常工作...
  • @DigitalJedi805 啊,没注意到。好吧,我的其他浏览器没有 WMP 插件,而是使用 VLC 媒体播放器插件(无疑使用不同的 API)。事实上,根据interoperabilitybridges.com/wmp-extension-for-chrome,已经无法在 chrome 中使用 WMP - 这可能是您的问题?
【解决方案2】:

我不认为是媒体播放器。

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

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

您需要为 embed 标签提供一个明确的 id,如果 object 标签实际上不包含有效的媒体播放器,那么您需要找到 embed 标签。

类似:

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

应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多