1. js获取URL中的参数 #
我们经常会在javascript里使用到URL里传递过来的参数,比如进行一些判断或者新页面的跳转等;而且还有一种情况,虽然使用的情况不多见,但是也会遇到:比如在一个页面里引用了一个aaaaa.js文件的链接,这个链接里还带着一个参数referer,同时呢,aaaaa.js还要获取referer的值
<script type="text/javascript" src="http://xxxx.com/aaaaa.js?referer=wenzi"></script>
网上有很多这样的例子,不过天下文章一大抄,他们的文章和样例都是一模一样的,解决不了我的问题。比如这个:
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
我们能够发现代码里,解析的是window.location.search,可是如果我想从整个URL链接里获取到我想要的参数呢,这个就不灵了。因为正则表达式的特殊性,这里的格式只能是这样子的:'?referer=wenzi'(?必须带着)。因此若想从整个URL中解析出参数的话,那就得先把URL用 url.split("?") 拆成两部分,然后使用后半部分,同时拼上"?"。就可以使用这个方法了。
不过这里我们有一个简单的方法,可是网上基本没有找到,就是修改正则表达式,以达到我们的要求,上面:
function getQueryString(url, name) {
var reg = new RegExp("(^|&|\\?)" + name + "=([^&]*)(&|$)", "i");
var r = url.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
这个方法就能从完整的URL里获取参数。
2. js获取javascript链接中的参数 #
如果我们某个js文件是收集性质的,或者需要区别不同地方引用的js,我们就要解析这个文件里带的参数,比如上面链接中的referer。
在这里我实现的方式的前提是:script标签是阻塞加载的,而且,我们是首先获取script里的URL,然后再解析URL里的参数!
getCurrentScript : function(name){
var i = 0,
result = null,
script, scripts, url, reg, r;
// firefox支持currentScript属性
if( document.currentScript ){
script = document.currentScript
}
else{
// 正常情况下,在页面加载时,当前js文件的script标签始终是最后一个
scripts = document.getElementsByTagName( 'script' )
script = scripts[ scripts.length - 1 ]
}
url = script.hasAttribute ? script.src : script.getAttribute( 'src', 4 );
return url;
}
获取到URL后再使用上面的方式解析出referer的值就行了。