1

この素晴らしい小さなオーディオ プレーヤーを Web サイトで使用したい: http://www.brianhadaway.com/html5-audio-player-with-flash-fallback/

HTML5 で問題なく動作しています: http://carolineelisa.com/audiotest/

しかし、( var isFlash = true;http://carolinelisa.com/audiotest2/js/jquery.audiocontrol.js で) Flash プレーヤーを強制的に使用すると、最初の読み込み時に File not found エラーが発生します: http://carolinelisa.com/ audiotest2/

その後、ボタンが機能するため、Flash プレーヤーの準備ができていないため、次のように機能しない可能性がありますか?

$(document).ready(function(){
$(this).audiocontrol();
$(‘.audioButton’).click();
});

ボタンを「クリック」する前にFlashプレーヤーを待つためのヒント(実際にこれが問題である場合)は素晴らしいでしょう。ありがとうございました!

4

1 に答える 1

0

jquery.audiocontrol.js の次の 2 行に注意してください。

91. addListeners(window);
92. audio.playFlash(currentTrack + options.defaultMediaExtension);

addListeners関数では、html5 オーディオ用の 3 つのイベント ハンドラーが追加されていますが、ここではウィンドウがその関数に渡されています。その結果、イベント リスナーがウィンドウに追加されます。次に、あなたが言及したようにプレーヤーの準備ができていないため、audio.playFlashはエラーを引き起こします。しかし、このエラーはonError関数を呼び出し、html5audio 要素に書き込まれたエラー メッセージを表示します。

EDIT:コードをさらに調べたところ、インデックスページの12行目の次のコードが原因で発生していることがわかりました

$(document).ready(function(){
    $(this).audiocontrol();
    $('.audioButton').click();
});

クリック イベントをトリガーすると、すぐにオーディオが再生されます。これは、html5 オーディオに対してのみ機能します。swfobject.js が動的に読み込まれるため、swf の埋め込みには数秒かかります。したがって、このコードは次のようになります

$(document).ready(function(){
    $(this).audiocontrol( { readyCallback:function(){ $('.audioButton').click();  } } );
}); 

jquery.audiocontrol.js の 125 行目に追加 (html5 オーディオ用)

if(options.readyCallback){
    options.readyCallback.call();
}

そして136行目でembedSWFのコールバック関数として渡します。EmbedSWF の最後のパラメーターは、SWF の準備ができたときに呼び出されるコールバック関数です。

swfobject.embedSWF(options.flashAudioPlayerPath, options.playerContainer, 
                 "0", "0", "9.0.0", "swf/expressInstall.swf", false, false, 
                 {id:options.flashObjectID}, options.readyCallback);

編集:コールバックの準備ができた後でも、外部インターフェイス関数が使用できない理由がわかりません。幅が 0 で高さが 0 であるため、疑わしいと思います。とにかく、以下に示すように関数loadFlash(141行目)を指定すると、問題が修正されました。その作業は今。

function loadFlash() {
    swfobject.embedSWF(options.flashAudioPlayerPath, options.playerContainer, 
             "1", "1", "9.0.0", "swf/expressInstall.swf", false, false, 
             {id:options.flashObjectID}, 
             function(){
        if(options.readyCallback){
            setTimeout(options.readyCallback, 150);
        }
});

}
于 2011-12-19T22:39:04.403 に答える