2

我在 videoJS 之上构建了一个播放器,但无法访问 videoJS 中的公共功能.ready()。问题是我的代码似乎在除 IE 之外的任何地方都可以使用(适用于 chrome、safari、ff 等):

var myPlayer = _V_('myvideojsId');
myPlayer.ready(function() {
    var player = this;
    player.myPublicFunction = function() {
        alert("hey!");
    }
});

myPlayer.myPublicFunction();

在 IE 中我得到

Object does not support this property or method

myPlayer.myPublicFunction()线。是其他浏览器让我摆脱了糟糕的代码还是这个 IE 的错?

任何帮助都会很棒,谢谢!

克里斯

4

2 回答 2

2

参考他们的文档,它准确地显示了乔纳森所说的: https ://github.com/zencoder/video-js/blob/master/docs/api.md#wait-until-the-player-is-ready

顺便说一句,他对 IE 的看法是正确的。尽管我们都喜欢讨厌它,但它多次为我发现了真正的问题。

只是为了更快地参考,这是完成此操作的方法的替代方法:

_V_("example_video_1").ready(function(){

  var myPlayer = this;

  // EXAMPLE: Start playing the video.
  myPlayer.play();

});
于 2012-12-05T16:24:20.757 回答
1

这可能是时间问题:

myPlayer.ready(function() {});
myPlayer.myPublicFunction();

您在此处的第一行传递一个函数,myPlayer以便在玩家准备好时调用。在大多数情况下,这不会立即发生,因此很可能会有延迟。这意味着您的公共函数不会myPlayer立即添加到对象中,而是在视频播放器就绪时完成此任务。

所有这一切意味着当 JavaScript 移动到第二行时,来自浏览器的适当响应是该方法不存在——因为它不存在。在视频播放器准备好之前它不会存在,直到稍后才会存在。

您可以使用更多的特征检测方法,并且仅在该方法存在时才调用该方法:

if (myPlayer.myPublicFunction) {
    myPlayer.myPublicFunction();
}

您也可以预先添加该方法:

myPlayer.myPublicFunction = function () { alert("Foo"); };
myPlayer.ready(callback);
myPlayer.myPublicFunction(); // 'Foo'

最后,我发现 Internet Explorer 不像其他浏览器那样宽容(这很好)。如果它今天起作用,很可能是因为代码中存在问题。

于 2012-12-05T15:59:25.243 回答