2

我一直在开发一个应用程序,当一个人登录帐户时,设备的 IP 地址存储在后端和本地存储中。然后当一个人从另一个浏览器登录同一个帐户时,它会显示一个带有最后登录IP地址的弹出窗口。它似乎适用于 chrome 和 Mozilla,但不适用于边缘浏览器。它总是返回 null,因为它没有在 pc.createDataChannel 之后输入代码。

代码片段如下。

const getIpAddress = state => {
    window.RTCPeerConnection = window.RTCPeerConnection || 
window.mozRTCPeerConnection || window.webkitRTCPeerConnection || false;
let ip = false;
if (window.RTCPeerConnection) {
    ip = [];
    var pc = new RTCPeerConnection({ iceServers: [] }), noop = function 
() {
    };
    pc.createDataChannel('');
    pc.createOffer(pc.setLocalDescription.bind(pc), noop);
    pc.onicecandidate = function (event) {
        if (event && event.candidate && event.candidate.candidate) {
            var s = event.candidate.candidate.split('\n');
            ip.push(s[0].split(' ')[4]);
            localStorage.setItem('ipV4Address', ip[0]);
        }
    };
}
return state;
};

我也尝试使用适配器 js,但不确定如何准确使用它。

4

2 回答 2

1

Edge v18 浏览器尚不完全支持 WebRTC 点对点连接。您可以在Can I use RTCPeerConnection中检查您的浏览器是否兼容?

于 2019-02-05T06:45:49.893 回答
0

似乎没有办法在边缘浏览器中实际获取私有 ip,所以不得不使用第三方 api 来获取公共 ip 并使用它。

于 2019-02-06T13:28:30.413 回答