Обратите внимание на эти две строки в jquery.audiocontrol.js.
91. addListeners(window);
92. audio.playFlash(currentTrack + options.defaultMediaExtension);
в addListeners добавляются три обработчика событий, которые предназначены для аудио html5, но здесь окно передается этой функции. В результате к окну добавляются слушатели событий. Тогда audio.playFlash вызывает ошибку, так как плеер не готов, как вы упомянули. Но эта ошибка вызывает функцию onError и показывает сообщение об ошибке, написанное для элемента html5audio.
EDIT:
Я изучил код дальше и обнаружил, что это происходит из-за следующего кода на странице индекса, строка 12
$(document).ready(function(){
$(this).audiocontrol();
$('.audioButton').click();
});
Запуск события click приводит к немедленному воспроизведению звука, который будет работать только для аудио html5. Встраивание swf занимает несколько секунд, так как swfobject.js загружается динамически. Так что этот код должен быть похож на
$(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);
EDIT:
Не знаю, почему функция внешнего интерфейса недоступна даже после получения обратного вызова. Я сомневаюсь, что из-за 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);
}
});
}