javascript中外部js文件取得自身完整路径得办法

时间:2019-07-01 发布者: 访问量:3717

有时候我们需要引入一个外部js文件,这个js文件又需要用到自己的路径或者是所在的目录,别问怎么又这么变态的需求,开发做久了各种奇葩需求也就有了!

有人第一时间想到的是location.href,可是哥哥,那个引用页面的路径啊。比如a.html:

1
2
3
<html>
<script src="/b/c.js"></script>
</html>

这样的话我们用location.href获取到的值是a.html文件本身的路径,并不是我们需要的c.js的路径。

那怎么办?

我先开始想到了一个方法,就是通过js的文件名去匹配,比如我写一个插件叫做dragondean.js,那么我可以将引用页(a.html)中所有的script标签获取到,然后通过匹配src属性中是否含有dragondean来获得我们需要的js文件路径。

但是这样一来就有问题了:

1.我们的插件dragondean.js在使用的时候不能被更名。

2.一个插件的js文件重复引用会导致错误

这种方式总是没有一种踏实的感觉...

后来.....我看了一片文章:http://blog.sina.com.cn/s/blog_715fa5c00100pwrj.html

里面提到的思路用到了浏览器对网页加载顺序的一个技巧,经过测试确实可行!

原理就是网页文档在解析的时候一边加载一边解析,当解析到script的时候先下载src中的内容并解析或者解析script中间的内容,然后再往下解析。当解析到当前script的时候我们可以获取已经加载的所有script标签,最后一个就是我们需要得到的这个了。

用到的方法代码如下:

获取自身的完整路径:

function getMySrc(){ var scriptSrc = document.getElementsByTagName('script')[document.getElementsByTagName('script').length -1].src; return scriptSrc;
}

 

获得自身的文件名:

function getMyScriptName(){ var scriptSrc = document.getElementsByTagName('script')[document.getElementsByTagName('script').length -1].src; var jsName = scriptSrc.split('/')[scriptSrc.split('/').length-1]; return jsName;
}

 

获得自身所在的目录路径:

function getMyPath(){ var scriptSrc = document.getElementsByTagName('script')[document.getElementsByTagName('script').length -1].src; var jsName = scriptSrc.split('/')[scriptSrc.split('/').length-1]; return scriptSrc.replace(jsName,'');
}

 

发布于
  用户评论
    生活编程