Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript videojs公共方法访问外部就绪功能和IE_Javascript_Internet Explorer_Object_Html5 Video_Public Method - Fatal编程技术网

Javascript videojs公共方法访问外部就绪功能和IE

Javascript videojs公共方法访问外部就绪功能和IE,javascript,internet-explorer,object,html5-video,public-method,Javascript,Internet Explorer,Object,Html5 Video,Public Method,我在videoJS上构建了一个播放器,在访问videoJS.ready()中的公共函数时遇到了问题。问题是,除了IE(适用于chrome、safari、ff等),我的代码似乎在任何地方都能工作: 我得到了一份工作 Object does not support this property or method 在myPlayer.myPublicFunction()行中。是其他浏览器让我摆脱了糟糕的代码,还是这是IE的错 任何帮助都会很好,谢谢 Chris这可能是时间上的问题: myPlayer

我在videoJS上构建了一个播放器,在访问videoJS
.ready()
中的公共函数时遇到了问题。问题是,除了IE(适用于chrome、safari、ff等),我的代码似乎在任何地方都能工作:

我得到了一份工作

Object does not support this property or method
myPlayer.myPublicFunction()
行中。是其他浏览器让我摆脱了糟糕的代码,还是这是IE的错

任何帮助都会很好,谢谢


Chris

这可能是时间上的问题:

myPlayer.ready(function() {});
myPlayer.myPublicFunction();
这里的第一行将函数传递给
myPlayer
,以便在播放器准备就绪时调用。在大多数情况下,这种情况不会立即发生,因此很可能会出现延迟。这意味着您的公共功能不会立即添加到
myPlayer
对象中,而是在视频播放器准备就绪时完成此任务

所有这些都意味着当JavaScript移到第二行时,浏览器的适当响应是该方法不存在——因为它不存在。在视频播放器准备好之前,它不会存在,这要等到以后

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

if (myPlayer.myPublicFunction) {
    myPlayer.myPublicFunction();
}
您也可以在手之前添加方法:

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

最后,我发现InternetExplorer不像其他浏览器那样宽容(这很好)。如果它今天出现问题,很可能是因为代码中有问题。

参考他们的文档,它准确地显示了Jonathan所说的:

顺便说一句,他说得对。尽管我们都喜欢恨它,但它已经多次为我找到了真正的问题

为了便于参考,这里有一个替代方法来完成此操作:

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

  var myPlayer = this;

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

});

谢谢乔纳森。。。这只适用于回调,但在ready&my公共函数中,我重写了一些在.ready()激发后定义的set/defined变量。。。让我写一个更好的例子……例如:player=this;seekPosition=0;然后我会通过类似myPlayer.setSeekPosition(10)的东西设置或覆盖seekPosition值;ready()中的公共函数是player.setSeekPosition=function(val){seekPosition=val;})。。。所以你说的对在ready()之前启动来说是有意义的,但是我不能在外部设置ready()中定义的内部属性/变量@Chris为什么要在ready回调中添加该函数?为什么不像上面那样提前添加它呢?因为基于videoJS文档,属性、函数等似乎是在.ready()中定义的。。。因为在你可以增加功能之前,videoJS播放器必须准备好。@Chris事实并非如此;在JavaScript中,您可以随时向对象添加方法。您提供的文档仅显示他们从
ready
方法中调用某些方法。这是有意义的,因为对象可能在更早的时候还没有准备好。不过,您可以随时添加方法。
_V_("example_video_1").ready(function(){

  var myPlayer = this;

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

});