【问题标题】:Passing key-value pairs to a JavaScript file将键值对传递给 JavaScript 文件
【发布时间】:2009-12-21 03:42:08
【问题描述】:

你能像这样将键值对传递给 JavaScript 文件吗:

<script type="text/javascript" src="http://www.example.com/script.js?key=value"></script>

【问题讨论】:

标签: javascript html


【解决方案1】:

scriptaculous 使用了该技术(请参阅line 54):

<script type="text/javascript" src="scriptaculous.js?load=effects,dragdrop">
</script>

您可以通过检查页面上script 元素的来源来实现这一点,我给您留了一个独立于框架的函数:

function getScriptVariable(scriptName, key) {
  var scripts = document.getElementsByTagName('script'),
      n = scripts.length, scriptSource, i, r;

  for (i = 0; i < n; i++) {
    scriptSource = scripts[i].src;
    if(scriptSource.indexOf(scriptName)>=0) {
      r = new RegExp("[\\?&]"+key+"=([^&#]*)");
      var keyValues = r.exec(scriptSource);
      return keyValues[1];
    }
  }
}

然后你可以按照你想要的方式嵌入一个脚本:

<script type="text/javascript" src="myScript.js?myKey=myValue">
</script>

并以这种方式使用上面的函数:

var value = getScriptVariable('myScript.js', 'myKey'); // "myValue"

【讨论】:

    【解决方案2】:

    不容易,除非您希望它们由生成 Javascript 的服务器端代码处理。

    但是,您可以在较早的 script 块中将变量定义为参数。

    例如:

    <script type="text/javascript">
        var key = value;
    </script>
    
    <script type="text/javascript" src="http://www.example.com/script.js></script>
    

    然后您可以像使用任何其他变量一样在script.js 中使用key 变量。

    编辑:正如 Upper Stage 所指出的,将参数放在自己的命名空间中会更好。

    例如:

    <script type="text/javascript">
        var MyScriptParameters = {
            param1: 123,
            param2: "Hello",
            param3: new Date,
            param4: function(text) { ... }
        };
    </script>
    

    然后您可以在script.js(或页面上的任何其他脚本)中写入MyScriptParameters.param2

    【讨论】:

    • 是的,但可能在全局以外的命名空间中定义。
    • scriptaculous 示例证明您可以很好地做到这一点,而无需分配变量。
    • 我知道这是可能的,但做起来没那么简单。
    【解决方案3】:

    不是那样的。上面将在 HTTP 服务器上执行带有参数key=value 的 GET 请求。这些不会(通常)影响返回给您的资源script.js(这是上面要求的)。

    【讨论】:

      【解决方案4】:

      要添加到 SLaks 答案,json 编码数据可以处理您的转义需求。在 php 中:json_encode()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-09
        • 2020-08-03
        • 2016-02-18
        • 1970-01-01
        • 2011-01-12
        • 2014-09-30
        相关资源
        最近更新 更多