assets-retry
assets-retry copied to clipboard
html内存在多个带defer的<script>,而且必须按顺序执行,若只挂了第一个script,retry插入的<script>执行顺序不正确
I'm submitting a...
[ ] Regression
[ ] Bug report
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request
Current behavior
html内存在多个带defer的
Expected behavior
Minimal reproduction of the problem with instructions
What is the motivation / use case for changing the behavior?
Environment
Assets-retry version: X.Y.Z
For Tooling issues:
- Browser version: XX
- Platform:
Others:
调整 script 标签插入的逻辑就好吧,retry 的 script 插入到加载失败的 script 后面一个节点
调整 script 标签插入的逻辑就好吧,retry 的 script 插入到加载失败的 script 后面一个节点
试过了,这样没用。目前还没想到可行的方案,建议还是改成 async 或者动态加载,避免顺序依赖
试过了,这样没用。目前还没想到可行的方案,建议还是改成 async 或者动态加载,避免顺序依赖
我最近想到一个逻辑,就是利用同步的 ajax 请求 js 代码,然后创建一个内联的 script 添加到失败的 js 后面,是可以实现 defer 脚本在失败重试后按顺序执行
试过了,这样没用。目前还没想到可行的方案,建议还是改成 async 或者动态加载,避免顺序依赖
我最近想到一个逻辑,就是利用同步的 ajax 请求 js 代码,然后创建一个内联的 script 添加到失败的 js 后面,是可以实现 defer 脚本在失败重试后按顺序执行
这方案应该不可行,因为 error 事件触发的时候,已经解析了其他 script 标签了,顺序已经是乱了的。 我最后用了一个不太优雅的方案:重试成功后,将重试成功的域名保存到 sessionStorage,然后刷新页面;页面初始化时,尝试获取 sessionStorage 内重试成功的域名,有的话,通过 MutationObserver 监听 html 自带 script 标签的插入, 同步修改该 script 的 src
试过了,这样没用。目前还没想到可行的方案,建议还是改成 async 或者动态加载,避免顺序依赖
我最近想到一个逻辑,就是利用同步的 ajax 请求 js 代码,然后创建一个内联的 script 添加到失败的 js 后面,是可以实现 defer 脚本在失败重试后按顺序执行
这方案应该不可行,因为 error 事件触发的时候,已经解析了其他 script 标签了,顺序已经是乱了的。 我最后用了一个不太优雅的方案:重试成功后,将重试成功的域名保存到 sessionStorage,然后刷新页面;页面初始化时,尝试获取 sessionStorage 内重试成功的域名,有的话,通过 MutationObserver 监听 html 自带 script 标签的插入, 同步修改该 script 的 src
我实际测试的时候顺序没乱呀,创建一个内联的 script 标签插入到失败的 js 后面,浏览器会优先执行这个内联的 js
试过了,这样没用。目前还没想到可行的方案,建议还是改成 async 或者动态加载,避免顺序依赖
我最近想到一个逻辑,就是利用同步的 ajax 请求 js 代码,然后创建一个内联的 script 添加到失败的 js 后面,是可以实现 defer 脚本在失败重试后按顺序执行
这方案应该不可行,因为 error 事件触发的时候,已经解析了其他 script 标签了,顺序已经是乱了的。 我最后用了一个不太优雅的方案:重试成功后,将重试成功的域名保存到 sessionStorage,然后刷新页面;页面初始化时,尝试获取 sessionStorage 内重试成功的域名,有的话,通过 MutationObserver 监听 html 自带 script 标签的插入, 同步修改该 script 的 src
我实际测试的时候顺序没乱呀,创建一个内联的 script 标签插入到失败的 js 后面,浏览器会优先执行这个内联的 js
我想知道这个 retryScript 是什么时候执行的,写在什么地方
@JRliu 就在 document.addEventListener('error', retryScript, true) 里面执行的