昨天一个朋友突然找我帮他看一个问题,他的前端项目需要嵌入到第三方的 webview 中运行,他在本地调试没有问题,打包嵌入之后发现请求接口时的自定义header不见了,尝试了很多办法无解。

后来发现他是在 vconsole 中看的没有自定义 header,我说你在浏览器的 console 里看看,竟然有自定义的header。
于是一番搜索发现这是 vconsole 的bug:

已定位到原因,在3.14.0时重写了XHR的代理逻辑,缺少代理了setRequestHeader方法导致未捕获到header。预计在3.14.4中修复。https://github.com/Tencent/vConsole/issues/522
感谢反馈。
这是一个 proxy 引起的时序问题。
Zepto 先是用自定义的 setHeader() 覆盖了 setRequestHeader() 方法,在处理完自己的 set headers 逻辑后,再调用原先的 setRequestHeader 方法。
但由于 setRequestHeader 是被 vConsole proxy 过的,内部通过 Reflect.get() 来获取原始的函数,此时便获取到了 Zepto 的 setHeader(),导致从头到尾没有调用到原生的 setRequestHeader() 方法。
这里做了下调整,确保在 setRequestHeader() 内部可以调用到原生方法。https://github.com/Tencent/vConsole/issues/533

这是 vconsole 开发者在issue中的回复。

于是关掉 vconsole 问题解决。

标签: none

添加新评论