【问题标题】:Constructing the script source dynamically动态构建脚本源
【发布时间】:2014-12-04 14:40:00
【问题描述】:

我正在使用以下代码来检索主机 IP 地址:

<script type="text/javascript" src="http://l2.io/ip.js"></script>

我需要从上面的 url 中检索 ip 地址并构造另一个类似这样的 URL:

<script type="text/javascript" src="http://<above_ip_address>:8080/MonarchDemo/.."></script>

这两个脚本都存在于 html 文件的 &lt;body&gt; 标记中,如下所示:

<html>
    <body>
        <script type="text/javascript" src="http://l2.io/ip.js"></script>
        <script type="text/javascript" src="http://<ip_address>:8080/MonarchDemo/.."></script>
    </body>
</html>

运行此 html 文件,第一个 script 显示正确的 IP 地址,但我无法在第二个 script 中替换该 IP 地址。请指导。

【问题讨论】:

  • 第一个脚本是动态的吗?你是怎么得到ipaddres的
  • 不,不是。第一个脚本是静态的。第二个脚本是基于第一个脚本返回的 IP 地址动态的
  • 你在某个js变量中有一些ipaddress吗
  • 不,我没有。我需要从第一个脚本中检索它,将其保存在一个变量中,然后在第二个脚本中使用它。

标签: javascript jquery html


【解决方案1】:

我不确定我是否完全理解了这个问题,但与其尝试替换静态脚本标记,不如动态创建一个?

<script type="text/javascript" src="http://l2.io/ip.js?var=ipAddressFound"></script>

var scr = document.createElement("script");

scr.type = "text/javascript";
scr.src = 'http://' + ipAddressFound + ':8080/MonarchDemo/..'; // Use the IP found above
scr.innerHTML = null;
document.body.appendChild(scr);

感谢这个通过脚本创建 var 的答案: Get client IP address via third party web service

【讨论】:

  • 感谢您的指导。同意这一点。但是第一个脚本返回给我的 ip 地址,如何替换您发布的上述代码中的 IP 地址?
  • @user182944 在上面的代码中有一个变量ipAddressFound - 它将保存第一个脚本返回的值。抱歉,如果我遗漏了什么。
  • 但是如何将脚本&lt;script type="text/javascript" src="http://l2.io/ip.js"&gt;&lt;/script&gt;检索到的IP地址保存在您命名为ipAddressFound的变量中?
  • 不可以使用第一个脚本将其保存在变量中吗?
  • @user182944 差不多。该脚本确定用户的 IP 地址,然后将该 IP 地址存储在一个名为 ipAddressFound 的变量中,此时您可以使用该 IP 做您想做的事情(在这种情况下,使用它来加载另一个脚本)。
【解决方案2】:

您可以使用 jQuery 来加载您的脚本take a look here

$.getScript('http://<ip_address>:8080/MonarchDemo/..', function(){});

【讨论】:

    【解决方案3】:

    您是否尝试在执行第一个脚本后在 ajax 调用中加载它?

    查看http://api.jquery.com/jquery.getscript/

    尝试类似:

    var getIP = function () {
        var ipadress;
        // code for IP-Adress retrieval here
        return ipadress;
    }
    
    // setup the URL
    var url = getIP() + ":8080/MonarchDemo/..."
    $.getScript( url, function( data, textStatus, jqxhr ) {
        // do want you want to do
        // i.e.
        // console.log( data ); // Data returned
        // console.log( textStatus ); // Success
        // console.log( jqxhr.status ); // 200
        // console.log( "Load was performed." );
    });
    

    作为替代方案,您可以在运行时使用 javascript (document.write ...) 插入第二个脚本块。

    【讨论】:

      【解决方案4】:

      你必须动态生成第二个脚本标签..

         var dynamicScript = document.createElement('script');
         var scriptUrl = ":8080/MonarchDemo/..";
      
         var scripts = document.getElementsByTagName("script");
      
         //fetch the source and parse out the domain ..
      
         var domain = scripts[0].getAttribute('src').replace('http://', '').replace('https://', '').split(/[/?#]/)[0];
      
         dynamicScript.setAttribute('src', "//" + domain + scriptUrl);
      
         document.body.appendChild(dynamicScript)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-13
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 2015-01-31
        • 1970-01-01
        • 2022-11-16
        相关资源
        最近更新 更多