十万火急!!!webrtc在手机浏览器上卡死、代码中断

用webrtc获取ip,PC上chrome获取正常。

但是手机浏览器,有的时候可以读取到ip,
有的时候读到下边这一句,直接卡死,后边代码也不执行了。
var pc = new RTCPeerConnection(servers, mediaConstraints);

大佬们,有没有办法,到这里如果不行就return出去,然后PC以及能获取ip的手机还正常拿ip……

在线等……非常急……

阅读 6.4k
3 个回答

自问自答:

我发现,小米、华为等使用UC浏览器内核的浏览器,以及UC浏览器均不支持WEBRTC技术,并且这些浏览器读取webRTC的代码时还可能会出现 卡死的问题,导致接下来的代码没办法执行,这就很特么坑了。

我的解决办法:

写一个定时器,3秒钟,如果还没获取到用户的ip,那么可以宣告失败了(3秒已经是很长的了,大家可酌情减少),那么就只能给一个空值了。

通过webRTC获取本地ip,属于安全漏洞,有的浏览器做了限制,支持webRTC,但是不能获取ip。

先判断下支不支持吧,Window下面有没有这个变量,有的话try catch一下。没有直接给空值

if (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection) {
    var Rtc = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
    try {
        var nrtc = new Rtc({
            iceServers: []
        });
        nrtc.createDataChannel('', {
            reliable: !1
        });
    } catch (e) {
        infoObj['ip'] = '0.0.0.0';
        return infoObj;
    }

    var e = false;
    nrtc.onicecandidate = function(Rtc) {
        ...
    };

    nrtc.createOffer(function(a) {
        nrtc.setLocalDescription(a, that.F(), that.F());
    }, that.F());

    infoObj.ip = window.currentIp || '0.0.0.0';

    return infoObj;
} else {
    infoObj['ip'] = '0.0.0.0';

    return infoObj;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题