javascript文件中获取当前文件路径详解
来源:自学PHP网
时间:2014-09-19 14:47 作者:
阅读:次
[导读] javascript文件中并没有像PHP那样的__FILE__常量来供我们取得当前文件路径。研究了下,发现我们可以用下面几种方法来实现:...
1,在jQuery中获取当前JS文件路径
在jQuery中获取当前JS文件的路径比较简单,只需要如下一行代码就搞定。
var __FILE__ = $("script").last().attr("src");
注意,我们一般把这行代码放到文件的开头,让文件加载的时候就立即执行,这样页面中的script元素中,当前文件恰好是最后一个script。我们千万不要把这行代码放到
代码如下 |
复制代码 |
$(document).ready();
$(function(){ });
|
中运行,因为如果放到这些语句中去的话,页面的DOM对象已经加载完毕,当前的script就不一定是最后一个script了,从而导致获取的路径不正确。
2,原生javascript获取当前JS文件路径
在原生的javascript中,要获取当前JS文件路径有两种方法。第一种其实思路和在jQuery中是一样的:
代码如下 |
复制代码 |
var __FILE__, scripts = document.getElementsByTagName("script");
__FILE__ = scripts[scripts.length - 1].getAttribute("src");
|
第二种方法是利用浏览器的异常处理机制,但是这种方法不支持IE10以下版本的IE浏览器:
代码如下 |
复制代码 |
var __FILE__;
try {
throw Error("获取JS路径有误");
}catch(ex){
if(ex.fileName) //Firefox
__FILE__ = ex.fileName;
else if(ex.stack)//Chrome 或 IE10
__FILE__ = (ex.stack.match(/ats+(.*?):d+:d+/)||['',''])[1];
else if(ex.sourceURL)//Safari
__FILE__ = ex.sourceURL;
}
|
在原生的javascript中获取当前文件路径的时候,建议使用第一种方法,兼容所有浏览器,第二种方法仅供参考
现在看一个完整的实例
代码如下 |
复制代码 |
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta content="IE=8" http-equiv="X-UA-Compatible"/>
<title>获取JS文件的路径 by 司徒正美</title>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<script src="/javascripts/dom-1.0.js?1270565974" type="text/javascript"></script>
</head>
<body>
<div>获取JS文件的路径 by 司徒正美</div>
</body>
</html>
|
下面是JS文件的内容,当然现在放出来的只针对本博文讨论的东西:
代码如下 |
复制代码 |
dom = {};
dom.getBasePath = function(){
var result = ""
try{
a = b
}catch(e){
if(e.fileName){//firefox
result = e.fileName;
}else if(e.sourceURL){//safari
result = e.sourceURL;
}else if(e.stacktrace){//opera
var m = e.stacktrace.match(/() ins+(.*?://S+)/m);
if (m && m[1])
result = m[1]
}
}
if(!result){//IE与chrome
var scripts = document.getElementsByTagName("script");
var reg = /dom([.-]d)*.js(W|$)/i
for(var i = 0 , n = scripts.length ; i <n ; i++){
var src = !!document.querySelector ? scripts[i].src
:scripts[i].getAttribute("src",4);
if(src && reg.test(src)){
result = src
break;
}
}
}
return result.substr( 0, result.lastIndexOf('/') + 1 );
}
alert(dom.getBasePath());// http://localhost:3000/javascripts/
|
补充一些相关的方法
//获取当前文件全路径
代码如下 |
复制代码 |
<script language="javascript">
alert(window.location.href);
alert(window.location);
alert(location.href);
alert(parent.location.href);
alert(top.location.href);
alert(document.location.href);
alert(document.URL);
</script>
//获取当前目录方法
<script type="text/javascript">
//方法一
var str = location.href;
var arr = str.split("/");
delete arr[arr.length-1];
var dir = arr.join("/");
alert(dir);
|
获取相对路径的方法
代码如下 |
复制代码 |
function getRelativePath()
{
var url = location.href;//当前url
var path = url.length - url.replace(///g,"").length - 4;
//层次为url包含/的长度-没有包含/的长度再减去项目头/的个数(如:http://hi.baidu.com/zdz8207/)
var str = "";
for(var i = 0; i < path; i++)
{
str += "../";//组合成一个相对路径的字符串返回
}
return str;
}
//方法二
alert(location.href.substring(0,location.href.lastIndexOf('/')));
</script>
//获取当前文件名
<script language=javascript>
var filename=location.href;
filename=filename.substr(filename.lastIndexOf('/')+1);
alert(filename);
</script>
|
|