微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

最近研究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是数字)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐