最近项目中用到FusionCharts+Jquery,BT的是iframe里套iframe——父iframe里面有4个子iframe,每个子iframe使用getJSON异步获取。
发现父iframe根本就不呈现子iframe的数据(4个iframe内容空的),改成同步后即可以呈现。
跟踪原因,是FusionCharts的render方法直接使用了attachEvent("onload"...)方法,异步时会导致load已经执行完毕,再也不会调onload方法。
采取的解决方法如下,直接修改FusionCharts.js,找到如下段,新增红色部分:
//store current object reference var obj=this; if(window.addEventListener) { //add onload event on firefox if(document.readyState == 'complete') { n.innerHTML = obj.getSWFHTML(); } else { window.addEventListener("load",function() { n.innerHTML = obj.getSWFHTML(); },false ); } } else if(window.attachEvent) { //add onload event on IE if(document.readyState == 'complete') { n.innerHTML = obj.getSWFHTML(); } else { window.attachEvent("onload", function() { n.innerHTML = obj.getSWFHTML(); }); } } else { // if all onload fails fails n.innerHTML = this.getSWFHTML(); }