Flex-AJAX 桥接器的 FDMSLib 具有加载函数,可将 flash 对象呈现到调用它的页面。这在使用 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 参数,但我认为这对于渲染 flash 对象是正确的。
我遇到的问题是,当我调用 FDMSLibrary.addInitializationCallback 函数时,桥似乎还没有准备好。
swf 文件告诉 javascript 已准备好使用。我很确定 swf 没有问题,因为我使用相同的 swf 和 javascript 库启动并运行了一个简单的测试页面,但没有任何其他 javascript、内容等的干扰。感觉就像 swf 没有被加载和“执行”,而 Firebug 似乎支持这一点,但我真的不知道为什么或我错过了什么。
如果您想查看 FABridge 的完整 javascript 库和 actionscript 源,您可以在 Adobe 的 subversion repo 中找到它们:fds ajax bridge repo path
在此先感谢您的帮助