flex-iframe不能回调flex函数,不能正常加载完成问题

本文介绍了一种解决Flex-iframe加载失败的方法,通过在IFrame.as文件中修改回调函数名称,并在网页的window.onload事件中主动触发该函数,确保IFrame正常加载及后续JS函数调用。

最近研究flex-iframe时发现源代码是在iframe的onload事件中回调了IFrame.as中的handleFrameLoad()函数来完成IFrame加载并调用之后用callIFrameFunction加入的JS函数。但是有时候发现这个又失效了,怎么都调不回handleFrameLoad函数,因此之后一直使用callIFrameFunction进行JS函数调用时全部失效(因为handleFrameLoad函数里把IFrame标识为已加载,如果没调用handleFrameLoad函数就不能进行别的操作了),因此只能自己主动触发这个函数了。

1、在IFrame.as的setupExternalInterface方法中的ExternalInterface.addCallback(_frameId + "_load", handleFrameLoad);语句后加入ExternalInterface.addCallback("on_load", handleFrameLoad);

2、在要加入的网页的window.onload事件中加入以下语句:parent.document.getElementById("SIP_ITS").on_load();SIP_ITS为FLEX应用的ID,on_load()为上一步加入的回调函数。

这样就主动回调了IFrame中注册的函数,也就完成了初始化的步骤了。


PS:最近又研究了一下,发现上面的不能回调_frameId + "_load"方法的原因是前台调用这个方法时出现了语法错误,不知道为何会产生这个错误。

猜想是因为回调函数名的问题,所以修改源代码的ExternalInterface.addCallback(_frameId + "_load", handleFrameLoad);为ExternalInterface.addCallback("on_load_" + _frameId, handleFrameLoad);,同时把IFrameExternalCalls.as的INSERT_FUNCTION_LOADIFRAME的onload改成"onLoad='\"+embedID+\".on_load_\"+frameID+\"();' ",这样就可以成功回调了。

分析下来原因可能是某些情况下不能回调方法名以数字开头的吧(因为frameID是数字)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值