从里面获取js文件查询参数

时间:2009-12-31 14:16:31

标签: javascript

我用这样的查询参数加载这个文件:
src='somefile.js?userId=123'

我在'somefile.js'文件中写了下面的函数,该文件读取'userId'查询参数 但我觉得这不是最好的方法。坦率地说,它非常难看。 有更好的方式吗?

function getId(){
   var scripts = document.getElementsByTagName('script'), script;
   for(var i in scripts){
        if( scripts.hasOwnProperty(i) && scripts[i].src.indexOf('somefile.js') != -1 )
            var script = scripts[i];
   }

    var s = (script.getAttribute.length !== undefined) ? 
        script.getAttribute('src') : 
        script.getAttribute('src', 2);

   return getQueryParams('userId',s);
};

4 个答案:

答案 0 :(得分:2)

// extracts the params from the currently running (external) script
var getScriptQp = (function(){
    var scripts = document.getElementsByTagName('script');
    var this_script_tag = scripts[scripts.length - 1]; //script tag of this file

    if( typeof this_script_tag != undefined && this_script_tag.src )
        var s = this_script_tag.src;
    else{
        return this.customer;
    }
    return s;
})();

// gets the Query Params of a givver query string
function getQueryParam(name, query){
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(query);
    if (results == null)
        return "";
    else
        return results[1];
}

getQueryParam( 'param',getScriptQp );

答案 1 :(得分:1)

阅读script部分中的head元素是可行的方法。有article的示例代码。这种方法看起来很脆弱,因为脚本的名称是硬编码的,如果重命名它可能会破坏。

答案 2 :(得分:1)

替代方式是:

  1. 只需使用该值设置JS变量即可。例如。 <script>var userId = 123;</script>
  2. 将值放在HTML DOM中的某个隐藏(输入)元素中,并以通常的方式访问它。
  3. 也就是说,请记住,JS代码在客户端运行,并且完全可由客户端控制。例如,您应该让JS在userId上执行某些特定于用户的逻辑,即依赖。在这种情况下,请将userId保持在服务器端的会话中,并使用ajax来获取结果。

答案 3 :(得分:0)

如果我错了,有人会纠正我,但我很确定如果你通过URL将params传递给你的脚本,这实际上意味着客户端永远不会缓存你的JS文件,因为每次它看起来都是不同的URL并将重新下载。