在laydate.js中加载路径出现错误
前言
laydate.js是属于Javascript系列的一款日期控件与时间插件,laydate.js支持兼容IE6在内的主流浏览器。laydate.js经过贤心大大的重写之后功能越来越强大,用起来也愈渐灵活了,但是在一个基于angular+ocLazyLoad的项目中出了点问题。
发现问题
laydate.js是通过ocLazyLoad异步加载引入的,结果始终加载不出来laydate.css文件,看了下路径错误,于是扒开代码发现是这样写的:
getPath:function(){ var e=document.scripts, t=e[e.length-1], n=t.src; if(!t.getAttribute("merge")) return n.substring(0,n.lastIndexOf("/")+1) }()
它是需要先获取到laydate.js的路径,然后再加上laydate.css的那一截最终拼接成一个完整的路径。
作者用的获取laydate.js路径的思路是:由于判断路径的js代码一般都直接放在js文件中而不是函数中,所以当加载该js文件时会立即执行其中的语句,而执行此语句时所获取到的js文件数目正好是e.length-1,因为页面后面的js文件还没有加载,所以该处的js文件获取的数目并不是页面所有的js文件的数目。这样一来,获取路径就无需再遍历了,而且文件判断也无需文件名,判断更加准确(e.length-1
永远都是其文件本身)。
但是这种方法有缺陷,直接在html页面中用script标签引入没得问题,如果通过document.write("<script src='*.js'></script")
或document.createElement("script")
动态加载亦或者异步加载等得到的路径却是最后一个js文件的路径,而非当前j文件的路径。
于是想起了document.currentScript
,一步就能到位,但是存在一定的兼容性问题。
var curSrc = document.currentScript.src; return curSrc.substring(0,curSrc.lastIndexOf("/")+1);
最终还是使用了下面这种简单粗暴的方法:
getPath:function(){ var e=document.scripts, n; for(var i=e.length;i>0;i--){ if(e[i-1].src.indexOf("laydate.js")>-1){ n=e[i-1].src.substring(0,e[i-1].src.lastIndexOf("/")+1); } } return n; }()
这种方法的思路很清晰,根据文件名获取引用的文件的src属性并进行判断截取即可。但这种办法有以下两个缺点:
1、需要遍历页面的所有js文件,有时可能效率会比较低。(我页面的js文件没几个,哈哈)
2、如果页面中出现目录不同的重名的js文件则可能判断错误。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
使用CommonsChunkPlugin如何做才能抽取公共模块
以上就是在laydate.js中加载路径出现错误的详细内容,更多请关注其它相关文章!
上一篇: 由PHP底层工作原理说起_PHP教程
推荐阅读
-
使用加载图片解决在Ajax数据加载中页面出现短暂空白的问题(推荐)
-
maven 致命错误: 在类路径或引导类路径中找不到程序包 java.lang
-
maven 致命错误: 在类路径或引导类路径中找不到程序包 java.lang
-
springboot中自定义日志生成位置出现错误_FileNamePattern [文件路径] does not contain a valid DateToken。
-
php注释在php关闭标签环境中容易出现的错误
-
vs 网站发布 到iis网站目录 出现错误 在分析向此请求提供服务所需资源时出错 分析器错误消息: 未能加载类型...
-
在laydate.js中加载路径出现错误
-
yii2框架中自己创建了一个文件夹,在本地运行没有问题,但是拉上服务器就出现服务器500的错误
-
使用加载图片解决在Ajax数据加载中页面出现短暂空白的问题(推荐)
-
大牛求救啊: 在apache中添加php模块时出现错误,怎么解决??