Skip to content

通道模拟技术实现时候的注意点:

  1. 必须实现好open. send. onload/onerror/onreadystatechange等基本事件。

  2. 一旦open时发现传递了无法native通道支持的参数,则回退成http通道,以避免调用方异常。

  3. 要考虑调用方一直使用一个xhr实例进行重复open/send的情况。因此是现实时不要在自定义xhr类型中加入状态字段,要保持请求结束后即无状态。

  4. 注意不要在自己重写的方法里瞎写函数入参默认值,除非确定跟底层xhr的默认值一样。

  5. 确保application/json类型的才能走通道(因为通道也只能支持这种类型),应该可以通过拦截setRequestHeader来检测content-type来实现。

  6. xhr open的时候传入一个相对路径的情况?

  7. 用例:文件上传的情况。

  8. 请求其他非公司域名。

  9. 读取后段响应头和状态码status的情况(例如axios可能会根据响应头进行json解析)。

  10. onload是否有效. onloadend事件是否有效。response/responseText/responseXML是否都正常。

  11. 最后要分析bigolog怎么实现的,再看看是否有冲突或影响。

  12. 由于initImoBan函数内,会先用localstorage内的js执行一次,后再用xhr拉回的js再执行一次。因此proxyXHR要防止多次执行的副作用。例如整个模块都会被加载两次并且从顶层就会执行2次。你的hook就不能hook两次,否则徒增两次重复拦截。

  13. 相对路径的请求过来。是不是根本无法完成域名替换等逻辑?

  14. 私有属性是否已经编译成es5.

  15. 检查各处try catch是否到位。

  16. 防止出现只有一个native配置的情况。hostRules: ['native_forwardRequest']

  17. setRequestHeader必须open后再调用:

  18. URL对象是否需要polyfill。私有属性是否polyfill。

  19. 确保所有事件模拟是符合预期的。