Wenzi

javascript获取URL链接和js链接中的参数

蚊子前端博客
发布于 2015/01/30 07:00
有时候我们会在javascript中使用到URL里传递过来的参数,或者我们引用了一个外部js文件的链接,而这个js文件要解析引用这个js文件里的链接。

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的值就行了。

阅读(2104)
Simple Empty
No data