【问题标题】:Passing javascript arguments via script src attribute [duplicate]通过脚本 src 属性传递 javascript 参数 [重复]
【发布时间】:2013-07-08 16:29:14
【问题描述】:

如果我有类似的 javascript 源代码

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

我可以在它的末尾添加更多值吗

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

然后在 javascript 中获取状态??

这个想法来自我必须获得客户端分辨率并将其保存到会话但我无法通过 php 获取它的情况,因此我必须通过 javascript 获取它,但我不想显示来自的脚本源代码

我认为这是可能的,因为我看到很多来源确实有这样的链接!

【问题讨论】:

  • 为什么一定要把分辨率传给脚本?脚本不能在需要的时候计算吗?
  • 我不明白你的意思。 state 会做什么?
  • 每当我向脚本源添加查询字符串参数时,它都是时间戳或版本以防止缓存。
  • 当我需要提供参数时,我通常会创建一个 PHP 文件(标题为文本/javascript),其中$_GET 的值并输出格式化的 js 文件:&lt;script src="http://domain.com/js/script.php?state=1" /&gt;。但是 js 上的 ? 值是 Jeremy 所说的时间戳或版本,以防止缓存。

标签: javascript


【解决方案1】:

以防万一有人想要实际问题的实际答案,而不是求助于全局变量和两个脚本标签:

<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);
}());

如果您需要传递很多东西,请使用通用的 queryString 解析器将脚本的 queryString 转换为对象。

【讨论】:

  • 我知道这是两年前的事了,但它与我正在构建的 1 行小部件完美配合。它需要一个用户 ID,我现在可以传递它而不会弄乱全局命名空间。 +1
  • @Cluckles:知道较新的浏览器支持document.currentScript属性,这使得函数的“胆量”归结为state=unescape(document.currentScript.src).split("state=")[1].split("&amp;")[0]
  • 谢谢@dandavis 更短的版本是:var src = document.currentScript.src; var url = new URL(src); url.searchParams.get('state');
【解决方案2】:

你不能这样做吗?

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

【讨论】:

  • 啊,谢谢!我怎么能忘记这个!!!
  • 我同意丹达维斯。这没有回答问题。当然,它解决了他们的问题。但他们提出的问题有所不同。
【解决方案3】:

在调用 JS 之前给变量会起作用。但是如果你不想用 vars 污染 Global,你可以试试 PHP 的方法:

创建一个 PHP 文件,在标头中声明它将是一个 javascript,用变量做任何你想做的事情,用 $_GET 获取它的值并输出格式化的 js 文件

&lt;script src="http://domain.com/js/script.php?state=1" /&gt;

<?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 完成的话,这些都是可见的。

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 2023-03-05
    • 2018-07-09
    • 2012-08-12
    • 1970-01-01
    • 2016-06-21
    • 2017-03-21
    • 2012-01-31
    • 2015-10-20
    相关资源
    最近更新 更多