#470·qiankun

dynamicHeadAppend 逻辑优化

Author: awmleerCreated Apr 20, 2020Updated Sep 17, 2026
Labelspr welcome

Background

当通过 head.appendChild 动态引入 js script 时,乾坤会通过 fetch 去异步加载脚本,然而这和浏览器的默认行为可能会出现差别,从而带来一些意外 bug。

Proposal

使用 XHR 来代替 fetch

XHR 虽然是有些过时,但是个人推荐 XHR 主要是基于以下两点的考虑:

  1. 更好的浏览器兼容性
  2. fetch 会忽略跨域的 set-cookie ,详见MDN上的文档

fetch() won't receive cross-site cookies; you can’t establish a cross site session using fetch. Set-Cookie headers from other sites are silently ignored.

根据 script 标签上的不同属性实现不同的行为

既然乾坤要使用自己的实现来替代浏览器的默认实现,就应该和 HTML 标准尽可能保持一致,script 标签上的一些属性会让其有不同的行为,而乾坤也应该根据这些属性有不同的行为:文档

例如,当 script 标签 crossorigin 属性为 use-credentials 时,应该对应到 xhr.withCredentials = true