FDMSLib для моста Flex-AJAX имеет функцию загрузки, которая отображает флэш-объект на странице, где бы он ни вызывался. Это вызывает проблемы при использовании Ext.JS, так как вставленный объект может быть либо отброшен другой функцией рендеринга, либо вызвать конфликты во время рендеринга страницы, поэтому я пытаюсь переписать функцию загрузки так, чтобы ее Ext.JS (и, возможно, другие JS рамки) дружелюбный.
Это оригинальная функция.
FDMSLibrary.load = function(path, callback)
{
var result = "<object id='_fesLib' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' \
codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0' \
height='1' width='1'> \
<param name='flashvars' value='bridgeName=flash'/> \
<param name='AllowScriptAccess' value='always'/> \
<param name='src' value='"+ (path != undefined ? path : "") + "'/> \
<param name='wmode' value='transparent' /> \
<embed name='_fesLib' pluginspage='http://www.macromedia.com/go/getflashplayer' allowScriptAccess='always'\
src='" + (path != undefined ? path : "") + "' height='1' width='1' flashvars='bridgeName=flash'/> \
</object>";
document.write(result);
// todo:need a callback and variable here so you can keep track that both the fabridge and the fdmsbridge are available
FDMSLibrary.addInitializationCallback("flash", callback);
// register for call back when the FABridge has completed initialization
FABridge.addInitializationCallback("flash", FABridge_ready);
}
Я заменил это следующим:
loadFDMSBridge: function(path,callback) {
var FABridgeSWF = new Ext.FlashComponent({
id : '_fesLib',
height: '1',
width: '1',
flashVars : {
bridgeName:'flash'
},
wmode : 'transparent',
flashVersion : '8.5.0.0',
renderTo : Ext.getBody(),
url : path,
listeners : {
'render' : {
fn : this.initBridge,
scope : this
}
}
});
},
initBridge : function () {
FDMSLibrary.addInitializationCallback("flash", this.initPolling);
FABridge.addInitializationCallback("flash", FABridge_ready);
}
Flash-объект отображается на странице, он использует атрибут data в объекте, а не src param, но я предполагаю, что это правильно для рендеринга flash-объектов.
Проблема, с которой я сталкиваюсь, заключается в том, что при вызове функции FDMSLibrary.addInitializationCallback может показаться, что мост не готов.
Файл swf сообщает javascript, что он готов к использованию. Я почти уверен, что с swf проблем нет, так как у меня есть простая тестовая страница, запускаемая с использованием тех же библиотек swf и javascript, но без какого-либо вмешательства со стороны любого другого javascript, содержимого и так далее. Такое ощущение, что swf не загружается и «не выполняется», и Firebug, похоже, подтверждает это, но я не знаю, почему или что я пропустил.
Если вы хотите увидеть полные библиотеки javascript и источник ActionScript для FABridge, вы можете найти их здесь в репозитории Adobe Subversion: fds ajax bridge repo path
Заранее спасибо за помощь