本文共 518 字,大约阅读时间需要 1 分钟。
bug情景大概是这样的:
桌面.exe 内嵌一个网页.html,网页通过js调用桌面的js api接口函数fn1,然后接着调用js api函数fn2。结果fn1执行正常,但是随后的fn2死活不执行。
后来经同事调试,用setTimeout解决了问题。
setTimeout( function (){ window.external.fn2(); },0); |
既然要用到setTimeout来重新安排一个events loop,那么可以肯定fn1和fn2同时调用的时候冲突了。后来想了下bug产生的原因应该是这样的:
页面里的js调用fn1发送通知给桌面.exe,桌面.exe会处于“忙”的状态,这时候就忽略掉js发来的其他通知,表现为fn2未执行。
完美的设计应该回调形式,但是现在桌面.exe给的js api是非回调+阻塞式。桌面客户端接受js发来的通知,起码要支持异步/排队,所以360桌面的js api设计这块儿有改进的余地。
本文转自Kai的世界,道法自然博客园博客,原文链接:http://www.cnblogs.com/kaima/archive/2012/09/20/2695215.html,如需转载请自行联系原作者。