将参数传递给.js文件

时间:2015-02-15 19:00:01

标签: javascript

我正在开发一个小部件。 它的代码是:

<script src="../test/js.js"></script>

我想将参数传递给这样的.js文件,因为我们传递了像查询字符串这样的参数。

<script src="../test/js.js?place=us&list=10"></script>.

这些是我的.js文件中的内容。

var _html = '<div id="FJ_TF_Cont" style="position: relative; padding: 0; margin: 0; border-width: 0px; width: 200px;">'
+ '<iframe width="210" height="640" src="../test/content.aspx" name="FJIframe" scrolling="no" frameborder="0" marginwidth="0" marginheight="0" style="width: 210px; border-width: 0px; z-index: 1;">'
+ '</iframe>'
+ '</div>';

document.write(_html);

请注意 iframe src 的内容:

src="../test/content.aspx"

现在我想将js字符串中的这些参数传递给此 src 作为查询字符串。

最终的src应如下所示:

 src="../test/content.aspx?place=us&list=0"

我需要帮助,因为我是js的新手。

6 个答案:

答案 0 :(得分:4)

将参数传递给JS文件中的函数,而不是作为文件本身的查询字符串。

声明类似

的函数
function doSomething(place, list) {
    //do something with place
    //do something with list
}

在其他JS中将其用作doSomething('us',10);

任何其他尝试做你打算做的事情都是被黑客攻击。虽然你可以实现它,但它不是设计的。见相关帖子 -

Get the query string on the called javascript file
Passing Querystring style parameters into Javascript file

普遍的共识是否定的,不能或不应该这样做。

-

修改

几个月后,我了解了cache busting。这是脚本文件上查询参数的一个特殊用例。考虑将缓存设置为一年到期的情况。为了解决这个时间问题,更改HTML href中的查询参数并不一定意味着您已经更改了脚本的内容,但它确实具有突破一年缓存到期的附加副作用。

答案 1 :(得分:1)

我认为更好更简单的方法是添加一个带变量的额外脚本标记。如果你保持它非常简单,你可以按如下方式进行,但对于大量变量,我会创建一个包含所有变量的对象:

<script type="text/javascript">
  var place="us"; 
  var list=0
</script>
<script type="text/javascript" src=....></script>`.

如果你想在src中这样做,你有两个选择:

  1. 服务器将变量添加到脚本中。它获取了对脚本的请求,而不仅仅是返回文件,它以与上面类似的格式将变量添加到变量中。这意味着它对服务器来说是额外的工作,因为它需要运行一个实际的脚本,并且返回的文件更难以缓存,尽管它是可行的(也取决于变化的数量。
  2. 或者,您可以让脚本找到正确的标记并解析其src参数。这很难做到,因为脚本不知道自己的名字。特别是当您组合并最小化脚本时,脚本标记可能对脚本不可用,因此您无法真正做到这一点。我会放弃这个选项,虽然我看过有人不止一次尝试过。

答案 2 :(得分:1)

使用PHP的一种可能解决方案就是这样。

在您已拥有的文件夹js.php中创建一个js.js文件并粘贴:

<?php

    header('Content-type: text/javascript');
    $string = ""; $i = 0;
    foreach($_GET as $key => $value)
    {
        if($i == 0){
            $string .= "?";
            $string .= $key . '=' . $value;
            $i++;
            continue;
        }
        $string .= '&' . $key . '=' . $value;
    };
    echo "
    var _html = '<div id=\"FJ_TF_Cont\" style=\"position: relative; padding: 0; margin: 0; border-width: 0px; width: 200px;\">'
    + '<iframe width=\"210\" height=\"640\" src=\"../test/content.aspx$string\" name=\"FJIframe\" scrolling=\"no\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" style=\"width: 210px; border-width: 0px; z-index: 1;\">'
    + '</iframe>'
    + '</div>';

    document.write(_html);
    ";
    ?>

更改

<script src="../test/js.js?place=us&list=10"></script> 

<script src="../test/js.php?place=us&list=10"></script>

它应该有用。

答案 3 :(得分:1)

我第二次@ goleztrol的回答。 这是一个较小的(单个脚本标签)版本

<script type="text/javascript">
  var place="us"; 
  var list=0;
  var script_tag = document.createElement('script');
  script_tag.setAttribute("type","text/javascript");
  script_tag.setAttribute("src", "<your-js-src>");
  document.getElementsByTagName('body')[0].appendChild(script_tag);
</script>

希望有所帮助:)

答案 4 :(得分:0)

您的服务器根据参数重写js,或者在脚本标记之前在javascript中设置一些预定义变量。

答案 5 :(得分:0)

简单来说:您希望在请求文件时使用查询参数的值更改javascript文件。当然,这是可能的。不幸的是,这只能通过一些服务器端处理来完成。

我无法建议/推荐任何服务器端,你需要自己解决这个问题。

一般的想法是:

  1. 服务器端接收请求并读取 Javascript文件模板
  2. 然后调用模板处理器并要求它在适当的位置替换值。这些值是从HTTP GET参数中检索的。
  3. 然后,服务器端将此文件与适当的缓存标头,内容类型标头一起提供给客户端。