通过script src属性传递javascript参数

7
如果我有一个像这样的JavaScript src:
<script src="http://domain.com/js/script.js"> 

我能在结尾处添加更多的数值吗?

<script src="http://domain.com/js/script.js?state=1"> 

如何在JavaScript中获取状态?

这个想法来自于一个情况,我需要获取客户端分辨率并将其保存到会话中,但我无法通过PHP获取它,因此我必须通过JavaScript获取它,但我不想从源代码中裸露出该脚本。

我认为这是可能的,因为我看到许多来源都有类似的链接!


1
为什么必须将分辨率传递给脚本?脚本不能在需要时进行计算吗? - JJJ
这是可能的,请参见通过src属性传递JavaScript参数获取详细信息。 - Matt
1
每当我向脚本源添加查询字符串参数时,它都是一个时间戳或版本,以防止缓存。 - Jeremy Gallant
状态将决定为每个分辨率使用哪种CSS! - Tin Nguyen
@apsillers - 你说得很对 - 我已经删除了我的链接。 - Ken
显示剩余5条评论
3个回答

12

如果有人想要实际问题的真正答案而不是依靠全局变量和两个脚本标签,可以参考以下内容:

<script src="http://example.com/js/script.js?state=1"></script>

在script.js内部:

(function(){
  var myTags = document.getElementsByTagName("script");
  var src = myTags[myTags.length-1].src;
  var state = unescape(src).split("state=")[1].split("&")[0];
  alert(state);
}());
如果您需要传输大量数据,请使用常见的查询字符串解析器将脚本的查询字符串转换为对象。

如果您需要传输大量数据,请使用常见的查询字符串解析器将脚本的查询字符串转换为对象。


1
我知道这已经两年了,但它与我正在构建的1行小部件包含完美地配合。它需要一个用户ID,现在我可以传递它而不会使全局命名空间混乱。+1 - jrounsav
2
@Cluckles:要知道,新的浏览器支持document.currentScript属性,这使得函数的“核心”简化为state=unescape(document.currentScript.src).split("state=")[1].split("&")[0] - dandavis
谢谢@dandavis,一个更短的版本是:var src = document.currentScript.src; var url = new URL(src); url.searchParams.get('state'); - Ali Alwash

4
你能不能做类似这样的事情?
<script>
    var state = 1;
</script>
<script src="http://domain.com/js/script.js"> 

啊,谢谢!我怎么会忘记这个!!! - Tin Nguyen
我同意dandavis的观点。这并没有回答问题。当然,它解决了他们在这种情况下的问题。但是他们所问的问题是不同的。 - RoboticRenaissance

1
在调用JS之前先声明变量是可行的。但如果您不想使用变量污染全局,可以尝试PHP方法:创建一个PHP文件,在头部声明它将是一个JavaScript文件,使用$_GET获取变量的值并输出格式化后的js文件。 <script src="http://domain.com/js/script.php?state=1" />
<?php
// We'll be outputting a JS
header('Content-type: text/javascript');

$phpState = $_GET['state'];
?>

function someCommonJS(){
    var myState = "<?=$phpState;?>"; /*printing php var into js*/
}

<?php
/* some more php*/
?>

/*some more js*/

这样,文件就能按你的要求输出,而且用户无法看到所有的 if else,如果使用js实现则这些代码会被显示出来。

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