javascript在第一次加载时无效 - 刷新后工作

时间:2017-11-09 05:12:31

标签: javascript php jquery

当我第一次测试时(新浏览器清除缓存),

它没有按预期工作。

一旦我刷新,它就能很好地运作。

我想错过了什么

这里我附上完整的脚本,请帮忙

<script>
                    //get the IP addresses associated with an account
                    function getIPs(callback){
                        var ip_dups = {};

                        //compatibility for firefox and chrome
                        var RTCPeerConnection = window.RTCPeerConnection
                            || window.mozRTCPeerConnection
                            || window.webkitRTCPeerConnection;
                        var useWebKit = !!window.webkitRTCPeerConnection;

                        //bypass naive webrtc blocking using an iframe
                        if(!RTCPeerConnection){
                            //NOTE: you need to have an iframe in the page right above the script tag
                            //
                            //<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
                            //<script>...getIPs called in here...
                            //
                            var win = iframe.contentWindow;
                            RTCPeerConnection = win.RTCPeerConnection
                                || win.mozRTCPeerConnection
                                || win.webkitRTCPeerConnection;
                            useWebKit = !!win.webkitRTCPeerConnection;
                        }

                        //minimal requirements for data connection
                        var mediaConstraints = {
                            optional: [{RtpDataChannels: true}]
                        };

                        var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};

                        //construct a new RTCPeerConnection
                        var pc = new RTCPeerConnection(servers, mediaConstraints);

                        function handleCandidate(candidate){
                            //match just the IP address
                            var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
                            var ip_addr = ip_regex.exec(candidate)[1];

                            //remove duplicates
                            if(ip_dups[ip_addr] === undefined)
                                callback(ip_addr);

                            ip_dups[ip_addr] = true;
                        }

                        //listen for candidate events
                        pc.onicecandidate = function(ice){

                            //skip non-candidate events
                            if(ice.candidate)
                                handleCandidate(ice.candidate.candidate);
                        };

                        //create a bogus data channel
                        pc.createDataChannel("");

                        //create an offer sdp
                        pc.createOffer(function(result){

                            //trigger the stun server request
                            pc.setLocalDescription(result, function(){}, function(){});

                        }, function(){});

        //read candidate info from local description
        var lines = pc.localDescription.sdp.split('\n');

        lines.forEach(function(line){
        if(line.indexOf('a=candidate:') === 0)
        handleCandidate(line);
        });
                    }

                    //insert IP addresses into the page
                    getIPs(function(ip){

                        //local IPs
                        if (ip.match(/^(192\.168\.|169\.254\.|10\.|172\.(1[6-9]|2\d|3[01]))/))
                           //document.getElementsByTagName("ul")[0].appendChild(li);
        document.cookie="ip="+ip;
                    });


                </script>

这个脚本在safari浏览器中也不起作用,但这个也在chrome,opera和Firefox中工作

请帮我解决这个问题,

谢谢......

1 个答案:

答案 0 :(得分:0)

Safari已针对here所述的“ip leak”问题进行了缓解。 WebRTC不是为未经用户同意从用户收集IP地址而设计的。