3

我想加载一个 JS,他的行为应该根据一个参数而有所不同。我认为这样做的方法之一可能是:

<script src="script.js?type=a" type="text/javascript"></script>
<script src="script.js?type=b" type="text/javascript"></script>
...

然后,我将使用正则表达式获取参数,例如:

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

(上面的函数来自这里)。

但是,我不确定这是否是最好的方法。您是否建议任何其他方式来执行此操作,例如在 JS 中加载全局变量<script></script>,然后从 JS 中读取它们?

4

4 回答 4

5

一般来说,组织代码可能有更好的方法,但配置参数比 URL 查询更简单的方法是简单地使用参数调用定义的函数:

外部脚本(foo.js):

function foo(param) {
    console.log(param);
}

HTML:

<script src="foo.js"></script>
<script>foo("parameter value");</script>

编辑:这是一个“配置”参数而不立即调用任何东西的示例(基本上,一个简单的闭包):

function (param) {
    $(document).ready(function () {
        // Use param
    });
}

$(document).ready已经是一个异步调用,所以这比其他方法更简单,但通常您可以使用 IIFE(立即调用函数表达式):(function (param) { })(paramValue)

于 2013-03-05T16:16:21.263 回答
1

您提供的getURLParameter功能将使用您在地址栏中看到的 URL,而不是<script>加载的那个。

为此,您需要替换location.search

Array.prototype.pop.call(document.getElementsByTagName('script')).getAttribute("src");
于 2013-03-05T16:16:46.960 回答
0

您可以在 php 中制作 javascript 并使用

var parameters = <?php echo json_encode($_GET); ?>
function getURLParameter(name) {
    return parameters[name];
}
于 2013-03-05T16:17:19.237 回答
0

我会在获取外部脚本之前设置一个全局变量,然后在内部使用它:

<script>var someParameter = 'a';</script>
<script src="script.js"></script>
于 2013-03-05T16:15:29.740 回答