360桌面JSAPI一个诡异的bug:客户端与网页通过js通信
2012-09-20 14:50
253 查看
bug情景大概是这样的:
桌面.exe 内嵌一个网页.html,网页通过js调用桌面的js api接口函数fn1,然后接着调用js api函数fn2。结果fn1执行正常,但是随后的fn2死活不执行。
后来经同事调试,用setTimeout解决了问题。
既然要用到setTimeout来重新安排一个events loop,那么可以肯定fn1和fn2同时调用的时候冲突了。后来想了下bug产生的原因应该是这样的:
页面里的js调用fn1发送通知给桌面.exe,桌面.exe会处于“忙”的状态,这时候就忽略掉js发来的其他通知,表现为fn2未执行。
完美的设计应该回调形式,但是现在桌面.exe给的js api是非回调+阻塞式。桌面客户端接受js发来的通知,起码要支持异步/排队,所以360桌面的js api设计这块儿有改进的余地。
桌面.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设计这块儿有改进的余地。
相关文章推荐
- 打开网页即可连接远程电脑——一个applet的远程桌面客户端
- 原来 同一个 bundleid的项目 的下面 可以 通过这个 解决,诡异的问题,
- 通过网页链接打开应用程序客户端的两种实现方式
- Windows图标缓存导致的一个诡异BUG
- 使用bind与引用遇到的一个很诡异的bug
- 通过组策略开启客户端远程桌面
- 如何通过跟踪一个客户端程序发出的sql的方法来优化SQL
- 自我学习总结2:在各个网页基本上一致时,通过URL传一个值就可以实现一个html实现多个页
- 通过网页链接打开应用程序客户端的两种实现方式
- 记录Qt的一个诡异Bug
- 解除网页百度云自动关联客户端,可通过迅雷或浏览者下载
- vnc 客户端和服务端共享同一个桌面
- 通过JavaScript脚本复制网页上的一个表格
- 一个Date对象引发的诡异bug
- BeautifulSoup处理gb2312编码网页的一个bug
- 通过一个简单的ListView例子看桌面开发和移动开发
- 通过一个网页获取ip地址城市名称
- 如何通过编程打开一个网页
- 解决了一个Web网页显示不全的BUG
- c#通过纯代码创建桌面快捷方式、创建程序菜单项、将网页添加到收藏夹