我想加载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;
}
(以上来自here的函数)。
但是,我不确定这是否是最佳方法。你有没有其他方法可以做到这一点,比如在<script></script>
中加载全局变量然后从JS中读取它们?
答案 0 :(得分: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)
答案 1 :(得分:1)
您提供的getURLParameter
功能将使用您在地址栏中看到的网址,而不是加载<script>
的网址。
为此,您需要将location.search
替换为
Array.prototype.pop.call(document.getElementsByTagName('script')).getAttribute("src");
答案 2 :(得分:0)
我只需在获取外部脚本之前设置一个全局变量,然后在里面使用它:
<script>var someParameter = 'a';</script>
<script src="script.js"></script>
答案 3 :(得分:0)
你可以在php中制作你的javascript并使用
var parameters = <?php echo json_encode($_GET); ?>
function getURLParameter(name) {
return parameters[name];
}