2011-06-25 9 views
0

現在のフレームを再生するのに苦労しています。私はswfobject ver 2.2を使用しています。事前にSWFOBJECT CurrentFrame Javascript

<script type="text/javascript"> 

     function flashplayer(flashname) { 

      var flashvars = {}; 
      var params = {}; 
      params.play = "true"; 
      params.menu = "true"; 
      params.scale = "noscale"; 
      params.allowfullscreen = "true"; 
      var attributes = { 
       id: "flashDiv", 
       name: "flashDiv" 
      }; 
      swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", flashvars, params, attributes); 
      var obj = swfobject.getObjectById("myAlternativeContent"); 
      totalFrames = obj.totalFrames; 
      $('#duration').html(totalFrames); 
      currentFrame1 = obj.currentFrame; 
      $('#current').html(currentFrame1); 
      obj.addEventListener("onStateChange", "onytplayerStateChange"); 
     } 
     function onStateChange() { 
      var obj = swfobject.getObjectById("myAlternativeContent"); 
      currentFrame1 = obj.TcurrentFrame; 
      $('#current').html(currentFrame1); 
     } 
     function stopflash() { 
      var obj = swfobject.getObjectById("myAlternativeContent"); 
      obj.Stop(); 
     } 
     function PlayFlash() { 
      var obj = swfobject.getObjectById("myAlternativeContent"); 
      obj.Play(); 
     } 
     function FlashRewind() { 
      var obj = swfobject.getObjectById("myAlternativeContent"); 
      obj.Rewind(); 
     } 
    </script> 

    <div id="duration"> 
     1 
    </div> 
    <div id="current"> 
     1 
    </div> 
    <input onclick="flashplayer('../../Video/test.swf');" type="button" style="width: 300px" 
     value="play flash" /><br /> 

ありがとう:

は、ここに私のスクリプトです。

答えて

1

あなたのコードには3つの問題があります。あなたが新たに作成された<object>に名前をassingingしている、あなたの属性オブジェクト内のIDと名前を指定することで

  1. 。つまり、<object>の名前を "flashDiv"に変更したため、swfobject.getObjectById("myAlternativeContent")は機能しません。代わりにswfobject.getObjectById("flashDiv")を使用してください。

  2. swfobject.getObjectByIdswfobject.embedSWFの直後に使用しようとしています。しかし、swfobject.getObjectByIdが呼び出される前に埋め込みが完了しない可能性があるため、これはおそらくうまくいかないでしょう。 (静的パブリッシュにのみgetObjectByIdが必要ですが、動的パブリッシュを使用する場合は標準getElementByIdを使用してもかまいません)

  3. SWFObject構文が無効なので、エクスプレスインストールパラメータは指定していません。これを代わりに使用:

swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", false, flashvars, params, attributes); 

#1と#2の解決策は、SWFObjectのcallback機能を使用することです。これは、埋込みが成功するまでDOM関数を呼​​び出さないようにすることによってタイミングを助けます。また、swfobject.getObjectByIdコールを避けることができる埋め込み型<object>への参照も提供しています。

function flashplayer(flashname) { 

    var flashvars = {}; 
    var params = {}; 
    params.play = "true"; 
    params.menu = "true"; 
    params.scale = "noscale"; 
    params.allowfullscreen = "true"; 
    var attributes = { 
     id: "flashDiv", 
     name: "flashDiv" 
    }; 
    function mycallback(event){ 
     var obj = event.ref; 
     totalFrames = obj.totalFrames; 
     $('#duration').html(totalFrames); 
     currentFrame1 = obj.currentFrame; 
     $('#current').html(currentFrame1); 
     obj.addEventListener("onStateChange", "onytplayerStateChange"); 
    } 
    swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", false, flashvars, params, attributes, mycallback); 
} 

タイミングに問題が発生する可能性があります。 SWFObjectのコールバックは、<object>がページに埋め込まれるとすぐに呼び出されます。つまり、SWFの読み込みが終了したわけではありません。

Flash PlayerのPercentLoadedメソッドとJavaScript setIntervalを組み合わせて、SWFの読み込み状態を確認できます。

+0

ありがとう、var obj = event.ref;を使用しました。 このエラーが発生しました(Microsoft JScriptランタイムエラー:プロパティ 'totalFrames'の値を取得できません:オブジェクトはnullまたは未定義です)。私はそれを次のように変更しました:var obj = swfobject.getObjectById( "flashDiv");私は全体のフレームを取得しますが、再生中の現在のフレーム番号はまだありません。 – hncl

+0

それは、私が私の記事の終わりに言及したタイミング問題のためです。 SWFの読み込みが完了していない場合は、TotalFramesを照会することはできません。 PercentLoadedを確認する条件文でクエリをラップします。また、TotalFramesは大文字のTで始まり、大文字と小文字を区別します。 obj.TotalFrames()http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html – pipwerks

+0

を参照してくださいありがとうございました。それでも現在のフレーム番号を取得できませんでした。また、TotalFramesはFireFoxやChromeでは動作しませんでした。この投稿が見つかりました。ご協力いただきありがとうございます。 – hncl