将参数传递给.js文件

4
我正在开发一个小部件。 它的代码如下:
<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个回答

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

声明一个函数,如下所示:
function doSomething(place, list) {
    //do something with place
    //do something with list
}

在其他JS中使用它,如doSomething('us',10);

任何其他尝试做你想做的事情都是一种被黑客入侵的尝试。虽然你可能会实现它,但这不是预期的设计。请参阅相关帖子 -

获取调用的JavaScript文件上的查询字符串
将查询字符串样式参数传递到JavaScript文件

一般共识是不行或不应该这样做。

--

编辑

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


一般化地说,传递查询字符串参数不应该这样做有点错误。在某些情况下,这是一个相当好的主意。想想用户特定的CSS。如果您将CSS和JS文件视为通过模板处理器可修改的动态资源,则可以很好地实现这一点。 - UltraInstinct

1
我认为更好、更简单的方法是添加一个带有变量的额外脚本标签。如果你保持它非常简单,你可以按照以下方式做,但对于大量变量,我会创建一个包含所有变量的对象:
<script type="text/javascript">
  var place="us"; 
  var list=0
</script>
<script type="text/javascript" src=....></script>`.

如果您想在src中执行此操作,您有两个选择:
  1. 服务器将变量添加到脚本中。它获取脚本请求,而不仅仅是返回文件,还会在文件前面以类似上面的格式添加变量。这意味着对于服务器来说需要额外的工作,因为它需要一个实际的脚本来运行,并且返回的文件难以缓存,尽管这是可行的(也取决于变量数量)。
  2. 或者,您可以使您的脚本找到正确的标记并解析其src参数。这很难做到,因为脚本不知道自己的名称。特别是当您组合和最小化脚本时,脚本标记可能无法被脚本找到,因此您不能真正地保证它的可靠性。我建议放弃此选项,尽管我看到过多次尝试。

1

使用PHP的一种可能的解决方案如下。

在您已经有js.js的文件夹中创建一个js.php文件,并粘贴以下内容:

<?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> 

to

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

"而且它应该可以工作。"

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>

希望能有所帮助 :)

0

你的服务器可以根据参数重写js,或者在脚本标签之前设置一些预定义变量。


0
简而言之:您希望在请求文件时,使用查询参数更改javascript文件。这是可能的。不幸的是,只能通过一些服务器端处理来实现。
我无法为此建议/推荐任何服务器端,您需要自行解决这个问题。
一般的想法是:
1. 服务器端接收请求并读取一个 JavaScript 文件模板。 2. 然后调用模板处理器,并要求其在适当的位置替换值。这些值从 HTTP GET 参数中检索。 3. 服务器端使用适当的缓存头,内容类型头向客户端提供此文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接