如何在html中引用传递给javascript的参数?

时间:2012-01-12 02:35:17

标签: javascript html

当我通过

调用脚本时
<script type="text/javascript" 
        src="include/javascript/test_something.js?v=1128557"></script>

如何引用html中传递的变量V?

提前致谢!

7 个答案:

答案 0 :(得分:1)

从页面中最后一个脚本元素的src属性中获取它:

var scripts = document.getElementsByTagName("script");
var src = scripts[scripts.length - 1].src;
var v = null;
if (/\?v=(.+)$/.test(src)){
    v = RegExp.$1;
}

答案 1 :(得分:1)

最简单的方法是使用服务器端技术。这是在php。

<?php
$v=1128557;
?>
<script type="text/javascript">
   //This will make this value available to javascript too
    var val=<?php=$v?>;
</script>
<script type="text/javascript" 
        src="include/javascript/test_something.js?v=<?php=$v?>"></script>

...
...
...
<div id='baba<?php=$v?>'>
 ...
 ...
</div>

这将转换为以下html

<script type="text/javascript">
   //This will make this value available to javascript too
    var val=1128557;
</script>
<script type="text/javascript" 
        src="include/javascript/test_something.js?v=1128557"></script>

...
...
...
<div id='baba1128557'>
 ...
 ...
</div>

答案 2 :(得分:1)

如果它是页面上的第一个脚本标记,您可以执行以下操作:

var thescripttag = document.getElementsByTagName('script');
var v = thescripttag[0].src.replace(/^[^\?]+\??/,''); //gets everything after the '?'

如果它不是第一个脚本标记,您可以将[0]更改为任何一个,或者尝试为脚本标记指定一个id(未经测试)。

答案 3 :(得分:0)

您可以通过查找所需的文件名找到相应的脚本代码,并从.src网址中获取参数。

function findScriptParams(fname) {
    fname = "/" + fname + "?";
    var scripts = document.getElementsByTagName("script");
    for (var i = 0; i < scripts.length; i++) {
        var pos = scripts[i].src.indexOf(fname);
        if (pos != -1) {
            return(scripts[i].src.substr(pos + fname.length));
        }
    }
}

然后你会像这样调用它:

var params = findScriptParams("test_something.js");
if (params) {
     // process the params here
}

答案 4 :(得分:-1)

您应该执行以下操作:

var scripts = document.getElementsByTagName('script');
var data = {};
for (var i = 0; i < scripts.length; i ++) {
    if (!scripts[i].src) {
        continue;
    }
    var value = scripts[i]..substring(scripts[i].indexOf('?') + 1);
    var params = value.split('&');
    for (var i = 0; i < params.length; i ++) {
        params[i] = params[i].split('=');
        data[params[i][0]] = params[i][1];
    }
}

编辑:刚刚收录了其他人的一些提示,并将其添加到我自己的答案中。

答案 5 :(得分:-1)

JavaScript只能通过window.location访问正在执行的网页的网址数据。除非Web服务器在输出中将其显式序列化为JavaScript,否则它无权访问传递给javascript文件本身的任何HTTP请求变量。

一个hack /解决方法是找到脚本标记,获取src属性,解析URL并提取所需的GET参数。

function getParamsFor(script) {
    var params, anchor, paramArray, keyVal, tag, scripts;

    scripts = document.getElementsByTagName("script");

    // Make sure [].filter exists beforehand
    tag = Array.prototype.filter.call(scripts, function (e) { 
        return e.src.indexOf(script) > -1;
    })[0];

    if (tag) {
        anchor = document.createElement("a");
        anchor.href = tag.src;

        paramArray = anchor.search.substring(1).split('&');
        params = {};

        for(var i = 0; i < paramArray.length; i++) {
           keyVal = paramArray[i].split('=');
           params[unescape(keyVal[0])] = (typeof keyVal[1] != "undefined") ? unescape(keyVal[1]) : keyVal[1];
        }

        return params;
    }
}

var o = getParamsFor("test_something.js");
o.v; // 112..

答案 6 :(得分:-1)

将其更改为

<script type="text/javascript"  
        src="include/javascript/test_something.php?v=1128557" />

然后创建脚本test_something.php

<?php
echo "var queryString='" . $_SERVER[`QUERY_STRING] . "'\n;";
?>
... rest of javascript here

您甚至可以使用PHP执行查询字符串的错误检查/解析,或者只是使用Javascript来执行此操作。