为了使SWF的公共API更可靠,我通常用try / catch块封装回调:
private function addCallback(functionName:String, closure:Function):void {
ExternalInterface.addCallback(functionName, wrapEventHandler(closure));
}
private function wrapEventHandler(closure:Function):Function {
var self:Main = this;
return function(...arguments):* {
try {
return closure.apply(self, arguments);
} catch (error:Error) {
// Print error report here
}
}
}
当'closure'发生异常时,将打印错误报告。
我注意到即使使用'null'代替'self'也能正常工作:
closure.apply(null, arguments);
在这种情况下使用'null'是否安全?
使用ExternalInterface注册的I回调不是静态函数;他们使用Main的类字段。
使用null,NaN和self可以正常工作。我发现使用NaN / null没有任何问题。