Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保存用户';使用webRTC时JavaScript变量的IP地址?_Javascript_Webrtc - Fatal编程技术网

如何保存用户';使用webRTC时JavaScript变量的IP地址?

如何保存用户';使用webRTC时JavaScript变量的IP地址?,javascript,webrtc,Javascript,Webrtc,我试图将用户的本地IP地址保存到JavaScript中的变量中。我在一篇文章中找到了部分解决方案,作者在前面的一个题为。该解决方案运行良好,使用WebRTC和JavaScript显示本地IP;但是,我无法将这些IP地址传递给变量。下面的代码显示了我正在尝试做的事情 在其中,我创建了一个id=saveIP的html标记。我试图用用户的IP(目前为IPv4)替换其内容。为此,我创建了一个varialbe window.saveIP,并使用脚本底部的document.getElementById('s

我试图将用户的本地IP地址保存到JavaScript中的变量中。我在一篇文章中找到了部分解决方案,作者在前面的一个题为。该解决方案运行良好,使用WebRTC和JavaScript显示本地IP;但是,我无法将这些IP地址传递给变量。下面的代码显示了我正在尝试做的事情

在其中,我创建了一个id=saveIP的html标记。我试图用用户的IP(目前为IPv4)替换其内容。为此,我创建了一个varialbe window.saveIP,并使用脚本底部的document.getElementById('saveIP').innerHTML方法将值传递给我的HTML标记

我见过其他解决方案,但它们似乎都只是简单地显示IP地址而不保存它们

我的问题是,为了捕获用户的本地IP并将其保存到变量中,我必须进行哪些修改

<html>
<body>

 <p id=saveIP> Replace this with IP </p>

<script>

function findIP(onNewIP) { //  onNewIp - your listener function for new IPs
  var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
  var pc = new myPeerConnection({iceServers: []}),
    noop = function() {},
    localIPs = {},
    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
    key;
    //window.saveIP = pc;
    //window.saveIP = localIPs; // Returns [object, object] or JSON.stringfy returns {}

  function ipIterate(ip) {
    if (!localIPs[ip]) onNewIP(ip);
    localIPs[ip] = true;  
  }
  pc.createDataChannel(""); //create a bogus data channel
  pc.createOffer(function(sdp) {
    sdp.sdp.split('\n').forEach(function(line) {
      if (line.indexOf('candidate') < 0) return;
      line.match(ipRegex).forEach(ipIterate);
});
    pc.setLocalDescription(sdp, noop, noop);
  }, noop); // create offer and set local description
  pc.onicecandidate = function(ice) { //listen for candidate events
    if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
    ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
  };
}


var ul = document.createElement('ul');
ul.textContent = 'Your IPs are: '
document.body.appendChild(ul);

function addIP(ip) {
  console.log('got ip: ', ip);
  var li = document.createElement('li');
  li.textContent = ip;
  window.saveIP = ip;  // <--value captured is [object HTMLParagraph]; JSON.stringify returns {}
  ul.appendChild(li);
}

findIP(addIP);
document.getElementById('saveIP').innerHTML = JSON.stringify(window.saveIP);
</script>
</body>
</html>

将其替换为IP

函数findIP(onNewIP){//onNewIP-新IP的侦听器函数 var myPeerConnection=window.rtpeerconnection | | window.mozrtpeerconnection | | | window.webkirtpeerconnection;//firefox和chrome的兼容性 var pc=新的myPeerConnection({iceServers:[]}), noop=函数(){}, localIPs={}, ipRegex=/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g, 钥匙 //window.saveIP=pc; //window.saveIP=localIPs;//返回[object,object]或JSON.stringfy返回{} 函数ipIterate(ip){ 如果(!localIPs[ip])onNewIP(ip); localIPs[ip]=真; } pc.createDataChannel(“”;//创建虚假数据通道 pc.createOffer(功能(sdp){ sdp.sdp.split('\n').forEach(函数(行){ if(line.indexOf('candidate')<0)返回; line.match(ipRegex).forEach(ipIterate); }); pc.setLocalDescription(sdp、noop、noop); },noop);//创建报价并设置本地描述 pc.onicecandidate=函数(ice){//侦听候选事件 如果(!ice | |!ice.candidate | |!ice.candidate.candidate | |!ice.candidate.candidate.match(ipRegex))返回; ice.candidate.candidate.match(ipRegex.forEach)(ipIterate); }; } var ul=document.createElement('ul'); ul.textContent='您的IP地址是:' 文件.正文.附件(ul); 函数addIP(ip){ log('got ip:',ip); var li=document.createElement('li'); li.textContent=ip; window.saveIP=ip;//此调用:

findIP(addIP);
是异步的,您正在尝试同步设置结果…将赋值行移到
addIP
方法内


更新

尝试此min版本:

(2)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)a)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)c)试试试试试试试(试(试(试(试(试(试(试(试(试(试(试(试(试(试(试(试(试)c.c.c.c.c.考生考生考生考生考生候选人候选人候选人候选人。候选人。候选人。候选人。候选人。候选人。候选人。候选人。候选人。候选人。候选人。候选人。候选人。候选人。候选人。候选人。考生考生。匹配(0-9)比赛(0-7)考生(0-9)3)3)3)3)(7)3)(7)3)(7)3)(7)(7)3:[a-f0-9]{1,4}{7})/g).forEach(r)}catch(e){}) findIP.then(ip=>document.getElementById('saveIP').innerHTML=ip).catch(e=>console.error(e))


将此替换为IP

谢谢mido指出我的
文档的错误位置。getElementByID('saveIP')。innerHTML=

为了捕获这两个IP,我包括了一个计数器和一个if语句


您的IP地址是:

本地IP(IPv4):将其替换为IP
本地IP(IPv6):将其替换为IP

变量计数=0 函数findIP(onNewIP){//onNewIP-新IP的侦听器函数 var myPeerConnection=window.rtpeerconnection | | window.mozrtpeerconnection | | | window.webkirtpeerconnection;//firefox和chrome的兼容性 var pc=新的myPeerConnection({iceServers:[]}), noop=函数(){}, localIPs={}, ipRegex=/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g, 钥匙 函数ipIterate(ip){ 如果(!localIPs[ip])onNewIP(ip); localIPs[ip]=真; } pc.createDataChannel(“”;//创建虚假数据通道 pc.createOffer(功能(sdp){ sdp.sdp.split('\n').forEach(函数(行){ if(line.indexOf('candidate')<0)返回; line.match(ipRegex).forEach(ipIterate); }); pc.setLocalDescription(sdp、noop、noop); },noop);//创建报价并设置本地描述 pc.onicecandidate=函数(ice){//侦听候选事件 如果(!ice | |!ice.candidate | |!ice.candidate.candidate | |!ice.candidate.candidate.match(ipRegex))返回; ice.candidate.candidate.match(ipRegex.forEach)(ipIterate); }; } 函数addIP(ip){ log('got ip:',ip);
window.saveIP=ip;//我以为我是在第45行window.saveIP=ip上做的。@Jacob把这一行也放在里面:
document.getElementById('saveIP')。innerHTML=JSON.stringify(window.saveIP)
谢谢!这很有效。我单击以向上投票,但我还没有使您的答案生效所需的信誉点。我没有想到要放置文档。getElementById('saveIP')。innerHTML=JSON.stringify(window.saveIP);在我有限的JavaScript使用中,我没有执行任何异步代码,因此我一直将其放在我的函数之外。一旦我的解决方案都能正常工作,我将发布我完成的解决方案。