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が2行目に移動したときに、ブラウザーからの適切な応答は、メソッドが存在しないということです-存在しないためです。ビデオプレーヤーの準備が整うまで存在しません。準備が整うまでは存在しません。

より多くの機能検出アプローチを使用して、メソッドが存在する場合にのみメソッドを呼び出すことができます。

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

事前にメソッドを追加することもできます。

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

結局、Internet Explorerは他のブラウザほど寛容ではないことがわかりました(これは良いことです)。今日動作している場合は、コードに問題がある可能性があります。

于 2012-12-05T15:59:25.243 に答える