代码之家  ›  专栏  ›  技术社区  ›  vsync Qantas 94 Heavy

从内部获取JS文件查询参数

  •  4
  • vsync Qantas 94 Heavy  · 技术社区  · 15 年前

    我用如下查询参数加载此文件:
    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 回复  |  直到 14 年前
        1
  •  2
  •   vsync Qantas 94 Heavy    14 年前
    // 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 );
    
        2
  •  1
  •   Darin Dimitrov    15 年前

    阅读 script 元素在 head 区段是前进的道路。有一个 article 带样本代码。这种方法似乎很脆弱,因为脚本的名称是硬编码的,如果重命名,它可能会损坏。

        3
  •  1
  •   BalusC    15 年前

    替代方法是:

    1. 只需使用该值设置JS变量。例如。 <script>var userId = 123;</script> .
    2. 将该值放在HTML DOM中的某个隐藏(输入)元素中,并以通常的方式访问它。

    也就是说,请记住JS代码在客户端运行,并且由客户端完全控制。例如,您不应该让JS做一些特定于用户的逻辑,这是 依赖的 在用户ID上。在这种情况下,应该将用户ID保存在服务器端的会话中,并使用Ajax来获得结果。

        4
  •  0
  •   John J. Camilleri    14 年前

    如果我错了,有人会纠正我,但是我很确定如果你通过URL把你的参数传递给你的脚本,这就意味着客户端永远不会缓存你的JS文件,因为每次它显示为不同的URL,都会被重新下载。