异步加载layui的模块在IE11下不兼容问题
异步加载layui的模块在IE11下不兼容问题
-
异步加载
layui
的模块在IE11
下报错:不是有效的模块。 -
通过断点查看
layui
的use
方法发现IE8
和Chrome
下getPath
都是layui.js
所在的目录,而IE11
下为空字符串。 -
getPath
的值为: -
doc.currentScript.src
是当前执行的js的路径,所以Chrome
能正常获取到layui.js
所在的目录,而IE中没有doc.currentScript
这个属性,所以会进入后面的方法中。 -
script.readyState
是判断脚本的加载状态的,interactive
表示还未执行完成,所以IE8
下也能正常获取到layui.js
的所在的目录,而IE11
的script.readyState
已经被删除了,所以IE11
下getPath
为空字符串。 -
但是不用异步加载,直接通过
<script>
标签引入layui
却又没问题,原因是:在script.readyState === interactive
都不成立时src
的值为空,则取js[last].src
,即此时<script>
最后一个的src
,也就是layui.js
所在的目录,而异步加载的情况最后一个不一定会是layui.js
,所以IE11
下getPath
为空字符串。
解决方法
-
在config中设置dir:
在layui的官方文档中也有layui底层方法 -
修改源码
IE11将script.readyState删除,但有script.onload,script.onload官方文档可以考虑从这下手。(这是一条思路,但因为第三方插件不由我提供,所以我也没实现,我用的是第一种方式)