腾讯 360浏览器 调用js问题
最近做的一个flash程序要上线了,QA测试出某些浏览器显示有问题,主要是一些基于IE内核的国内浏览器,例如360等。最后调试发现问题是从js获取参数都是空,也就是ExternalInterface.call都返回null。网上找到的一个简单的方法是延迟初始化,就像下面这样:
public function TestMain() { super(); setTimeout(startInit, 50); } private function startInit():void { var p:Object = ExternalInterface.call("getParam"); trace(p); }
改完后基本正常了,过了几天代码改了改又返回空了。我把js和as代码看了半天都想不通为什么。最后想起来构造函数执行之前可能做了其他初始化,然后检查了一下成员变量,发现很多成员都是 var aa:AA = new AA(); 这样的结果是构造函数的延迟逻辑还没执行,很多类已经开始了初始化,而且某些构造函数里面可能调用了ExternalInterface.call, 最后导致startInit里面的ExternalInterface的call返回还是null。我把代码重构了一下,将字段初始化都放到构造函数里面,测试OK。总而言之,代码的结构还是很重要的。