动态构造脚本源

时间:2014-10-09 15:26:32

标签: javascript jquery html

我使用以下代码检索主机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文件的<body>标记内,如下所示:

<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地址。请指导。

4 个答案:

答案 0 :(得分:3)

我不确定我是否完全理解了这个问题,但是为什么不动态创建一个静态脚本标签,而不是尝试更换静态脚本标签?

<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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您是否尝试在执行第一个脚本后在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 ...)来处理第二个脚本块。

答案 3 :(得分:1)

您必须动态生成第二个脚本标记..

   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)