异步加载layui的模块在IE11下不兼容问题

异步加载layui的模块在IE11下不兼容问题

  1. 异步加载layui的模块在IE11下报错:不是有效的模块。 异步加载layui的模块在IE11下不兼容问题

  2. 通过断点查看layuiuse方法发现IE8ChromegetPath都是layui.js所在的目录,而IE11下为空字符串。 异步加载layui的模块在IE11下不兼容问题

  3. getPath的值为: 异步加载layui的模块在IE11下不兼容问题

  4. doc.currentScript.src是当前执行的js的路径,所以Chrome能正常获取到layui.js所在的目录,而IE中没有doc.currentScript这个属性,所以会进入后面的方法中。 异步加载layui的模块在IE11下不兼容问题

  5. script.readyState是判断脚本的加载状态的,interactive表示还未执行完成,所以IE8下也能正常获取到layui.js的所在的目录,而IE11script.readyState已经被删除了,所以IE11getPath为空字符串。 异步加载layui的模块在IE11下不兼容问题

  6. 但是不用异步加载,直接通过<script>标签引入layui却又没问题,原因是:在script.readyState === interactive都不成立时src的值为空,则取js[last].src,即此时<script>最后一个的src,也就是layui.js所在的目录,而异步加载的情况最后一个不一定会是layui.js,所以IE11getPath为空字符串。 异步加载layui的模块在IE11下不兼容问题

解决方法

  1. 在config中设置dir: 异步加载layui的模块在IE11下不兼容问题
    在layui的官方文档中也有layui底层方法

  2. 修改源码 异步加载layui的模块在IE11下不兼容问题IE11将script.readyState删除,但有script.onload,script.onload官方文档可以考虑从这下手。(这是一条思路,但因为第三方插件不由我提供,所以我也没实现,我用的是第一种方式)