发现IP八位字节,然后将其设为href URL?

时间:2017-09-19 21:34:25

标签: javascript variables url concatenation href

好的,所以我走得很远。首先,这是我无法改变的先决条件:

  • Windows平台
  • 只能使用IE 11

我的目标:检测客户端IP地址,然后将该变量放入网页上的URL中。基本上,此链接会将用户带到该设备的“主页”。

由于它是一个Windows操作系统,我可以使用ActiveX调用,就像它对特定于单个函数一样长。在这种情况下,该功能是获取客户端的IP地址。

<script>
    var objLocator = new ActiveXObject("WbemScripting.SWBemLocator");
    var objService = objLocator.ConnectServer(".","root\\CIMV2");

    instances = objService.ExecQuery(
        "SELECT Caption, IPAddress, MACAddress FROM Win32_NetworkAdapterConfiguration"
    );

    e = new Enumerator(instances);

    var IPAddy = "";
    for(;!e.atEnd();e.moveNext()) {
        nic = e.item();

        if(nic.IPAddress!=null) {
            var ipArray = VBArray(nic.IPAddress).toArray();
            IPAddy = IPAddy + ipArray[0]+"<br>";
        }
    }
</script>

现在我的IP地址为'IPAddy',我将其删除以获得第四个八位字节 - aaa.bbb.ccc.ddd的'ddd'。

<script>
  var input = IPAddy;
  var split = input.split('.');
  var TPage = split[3];
</script>

现在我无法正常工作。 (我认为答案是here,但它对我不起作用。)我想取变量' TPage '并将其变成PC用户的URL。

在HTML文件的正文中:

<div class="w3-bar-block w3-black">
  <a class="w3-bar-item w3-button w3-blue" href="bodytest016.html">Start</a>
  <a class="w3-bar-item w3-button w3-text-white" href="pages/' + TPage + '.html" target="bigWindow">Your Computer Information</a>
  <a class="w3-bar-item w3-button w3-text-white" href="pages/links.html" target="bigWindow">Your Web Pages</a>
  <a class="w3-bar-item w3-button w3-text-white" href="pages/help.html" target="_blank">Help</a>
</div>

我已经检查过变量脚本是否可以通过添加页面的一小部分来检查我的工作:

<script>
    document.write(IPAddy);
    document.write(TPage);
</script>

在一天结束时,我想打开IE浏览器到“开始页面”。然后该页面将我的IP地址标识为95.10.10.126,我将能够点击“您的计算机信息”链接,该链接应该转到./pages/126.html。

所以我做错了什么: ... href =“pages /'+ TPage +'。html”(您的计算机信息链接)?在IE中,它看起来像这样:“file:/// F:/pages/'+%20TPage%20+%20'.html”

非常感谢任何和所有建议。谢谢你的时间。

3 个答案:

答案 0 :(得分:2)

您的问题出在href="pages/' + TPage + '.html";你不能直接在HTML中使用JavaScript变量。

相反,您首先需要定位元素。在我的示例中,我使用 document.getElementById 执行此操作,但请注意,您需要在元素上使用id属性才能使用该选择器。选择后,您需要更改href属性。您可以使用+将固定字符串与JavaScript变量组合在一起进行一些简单的连接:

var TPage = '127.0.0.1';
var link = document.getElementById('link');
link.href = "pages/" + TPage + ".html";
console.log(link);
<a id="link">Your Computer Information</a>

希望这有帮助! :)

答案 1 :(得分:0)

HTML:

<a href="pages/' + TPage + '.html">Your Computer Information</a>

对您存储最后一个八位字节的JavaScript变量TPage一无所知,而是假设您希望文字' + TPage + '出现在网址中。由于其中一些在网址中不是有效字符,因此会将其翻译为您正在查看的%编码字符串。

您可能想要做的是让JavaScript设置指向的URL。有很多方法可以做到这一点。

假设您希望将JavaScript与HTML分开,一种方法如下:

  • id添加到相关链接
  • 更改相关链接的href以获得IP八位字节的占位符
  • 添加一些JavaScript代码(位于页面底部,必须位于链接下方),以修复href中的网址。

它可能看起来像这样:

<a id="info-link" href="pages/${IP_OCTET}.html">Your Computer Information</a>
<script>
    var link = document.getElementById('info-link');
    link.href = link.href.replace('${IP_OCTET}', TPage);
</script>

答案 2 :(得分:0)

优秀!两个答案都很棒。

从Obsidian Age的回答中,我创建了这个脚本:

<script>
  var input = IPAddy;
  var split = input.split('.');
  var TPage = split[3];
  var link = document.getElementById('link');
  link.href = "pages/" + TPage + ".html";
  console.log(link);
</script>

然而,我需要PeterJCLaw的回应让它发挥作用。我必须将该脚本放在菜单DIV对象的底部,就在锚标记链接之后。像这样:

<div class="w3-bar-block w3-black">
  <a class="w3-bar-item w3-button w3-blue" href="bodytest016.html">Start</a>
  <a class="w3-bar-item w3-button w3-text-white" id="link" target="bigWindow">Your Computer Information</a>
  <a class="w3-bar-item w3-button w3-text-white" href="pages/links.html" target="bigWindow">Your Web Pages</a>
  <a class="w3-bar-item w3-button w3-text-white" href="pages/help.html" target="_blank">Help</a>
  <script>
      var input = IPAddy;
      var split = input.split('.');
      var TPage = split[3];
      var link = document.getElementById('link');
      link.href = "pages/" + TPage + ".html";
      console.log(link);
  </script>
</div> 

佑HOOO!谢谢你们两个!