zoukankan      html  css  js  c++  java
  • 360桌面JSAPI一个诡异的bug:客户端与网页通过js通信

    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.ma所有,欢迎转载,转载请保留:
    • 出处:http://kaima.cnblogs.com
    • 作者:kai.ma
  • 相关阅读:
    控件
    ASP.NET简介与Repeater重复器
    WinForm简介
    ADO.net测试题
    6.08练习
    高级查询几种方法
    数据库查询的几种方式
    MySQL更新(修改、查询)
    create(创建) table(表格) student<表名>
    候选键,主键,外键
  • 原文地址:https://www.cnblogs.com/kaima/p/2695215.html
Copyright © 2011-2022 走看看