在Javascript中,是否可以将变量传递到<script>“src”参数?</script>

时间:2010-12-20 19:52:48

标签: external javascript

Javascript中是否可以通过src参数传递变量?即

<script type="text/javascript" src="http://domain.com/twitter.js?handle=aplusk" />`

我希望twitter.js查看是否在执行我需要的操作之前传递了“句柄”,并将其响应返回到调用twitter.js的原始页面。

我最初在twitter.js创建了一个功能,执行以下操作:

function getHandle() {
  var vars = [], hash, username;
  var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

  for(var i = 0; i < hashes.length; i++) {
    hash = hashes[i].split('=');
    if (hash[0] == 'handle') 
     username = hash[1];
  }

  return username;
}

问题,这是有道理的,window.location.href不会对我从<script src="" />

调用的文件起作用

谢谢!

4 个答案:

答案 0 :(得分:7)

我可以在这里看到两种解决方案。

首先:您可以在托管twitter.js的服务器上处理这些GET参数,以便动态更改js文件。例如,您的文件是:

var handle = {{ handle }};

您的服务器会以某种方式处理该文件,并根据发送的请求替换该twitter.js模板文件。

第二个选项是在加载twitter.js的页面上设置全局变量,如下所示:

<script type="text/javascript">
    window.twitter_js_handle = 'aplusk';
</script>
<script type="text/javascript" src="http://domain.com/twitter.js" />

在twitter.js中:

var handle = window.twitter_js_handle || null;

答案 1 :(得分:7)

我使用以下模式将查询变量从<script src="script.js?foo=bar&baz=zing"></script>转换为对象包含键:值对。代码放在script.js的顶部:

var getVars = {};

(function(){
    var scripts, currentScript, queryString;

    scripts = document.getElementsByTagName('script');
    currentScript = scripts[ scripts.length - 1 ];
    queryString = currentScript.getAttribute('src').replace(/[^\?]*/,'').split('&');
    for(var i=0;i<queryString.length;i++){
        var keVal = queryString[i].split('=');
        getVars[ keyVal[0] ] = keyVal[1];
    }

}());
// console.info( getVars );
// Object { foo="bar", baz="zing"}

这可能不适用于延迟/异步添加的脚本元素,因为它依赖于即时代码执行。

答案 2 :(得分:1)

不确定。您可以访问该参数的唯一方法是通过服务器端。 Soo,使twitter.js成为一个PHP页面(使用mod_rewrite或其他)抓取$_GET['handle'],然后将其自身作为Content-Type: text/javascript并转储js的内容。

答案 3 :(得分:1)

我建议使用更多安全方法-必须添加ID:

<script id="myTargetScript" src="http://example.com/file.js?param=value" />

然后在您的.js文件中

function GetParams(target_id)
{
    var getVars = {};
    if( document.getElementById(target_id) )
    {
        var queryString = document.getElementById(target_id).getAttribute('src').split("?").pop().split("&");
        for(var i=0;i<queryString.length;i++){
            var keyVal = queryString[i].split('=');
            getVars[ keyVal[0] ] = keyVal[1];
        }
    }
    return getVars;
}


// console.log(   GetParams('myTargetScript')   );