你能否将URL参数传递给Javascript文件?

4
<script src="myscript.js?someParameter=123"></script>

myscript.js中,有没有办法获取someParameter被设置为123?或者唯一的方法是使用生成带有参数的javascript文件的服务器端脚本?


可能是如何将参数传递给Script标签?的重复问题。 - Andy E
1
不是这样,但文件可以访问在“调用”文件中设置的变量,并且调用文件可以调用在包含的文件中定义的方法来初始化事物。 - Dave Newton
是的,你可以从调用文件中显式调用初始化函数等。然而,我想知道这种特定方法是否可行,因为它(在语法上)是最简单的方法。 - Vilx-
3个回答

2
答案是肯定的。我在各种项目中已经做了十多年。解决方案实际上很简单,只是不直观(您必须生成错误)。 明确一点,以下代码让您可以像这样做:

1
很棒,但是有一个小错误,你必须将“if (!url) url = scriptName()”重命名为“if (!url) url = getScriptName()”。 - Payedimaunt
太棒了,已修复。谢谢! :) - undefined

2

要获取URL参数,可以使用 window.location.href。从名称上看,它指的是当前窗口。而<script>标签的作用是将链接的文件嵌入到当前文档中,因此在同一窗口内。如果你从链接的JavaScript文件中解析window.location.href,你只能获取到嵌入文档的URL。

有两种方法可以将参数传递给另一个JavaScript文件:

  1. 如@Dave Newton所建议,只需声明一个变量,然后像之前那样嵌入JS文件(当然不需要参数,因为它们没有效果)。
  2. 创建一个iframe,将你想要的参数传递到iframe的URL中,然后在iframe内部嵌入JavaScript文件。iframe会创建一个新的window实例。

好的,我接受你的答案。我知道其他方法,只是想知道这个是否可行。 - Vilx-
你还知道哪些其他方法? - Fabian
好的,有你提出的两种方法。更经典的变化是要求调用文件调用初始化代码。在一个被提议为重复的线程中(我认为是这样),还有另外两种情况。两者都依赖于执行时页面上最后一个<script>标签将是“当前”标签的事实。然后作者将参数隐藏在class属性中,而一篇文章的链接从src属性中提取它们。我想那是可能得到的最接近的方法了。 - Vilx-
然后,您还可以采用HTML5的方式,创建带有data-属性的HTML元素。您可以将它们放在<script>标签上,或者如果您的脚本需要一个目标元素来工作,您也可以将其设置在该元素上。 - Vilx-
同时,将参数作为链接属性传递也是可行的 - https://dev59.com/jG435IYBdhLWcg3wpx2x - lubosdz

1
Jquery Address可以实现这一点,所以我一直在检查他们的代码,这是我刚刚自己创建的改进解决方案:
$.each($('script'), function(id, val){ //loop trough all script-elements
    var tmp_src = String($(this).attr('src'));//store the src-attr
    var qs_index = tmp_src.indexOf('?');//check if src has a querystring and get the index

    //Check if the script is the script we are looking for and if it has QS-params
    if(tmp_src.indexOf('myscript.js') >= 0 && qs_index >= 0)
    {
        //this is myscript.js and has a querystring
            //we want an array of param-pairs: var1 = value1, var2 = value2, ...
        var params_raw = tmp_src.substr(qs_index + 1).split('&');

        //create empty options array
        var options = [];

        //loop troug raw params
        $.each(params_raw, function(id, param_pair){
                    //split names from values
            var pp_raw = param_pair.split('=');
                    //store in options array
            options[pp_raw[0]] = pp_raw[1];
        });
            //check the results out in the console!
        console.log(options);
    }
});

我希望这能满足你的需求?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接