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);
}
});
}