javascript在第一次加载时不工作-刷新后工作
当我第一次测试时(刷新浏览器-清除缓存) 它没有像预期的那样工作 一旦我刷新,它的工作非常好 我想我错过了什么 这里我附上完整的脚本,请帮助javascript在第一次加载时不工作-刷新后工作,javascript,php,jquery,Javascript,Php,Jquery,当我第一次测试时(刷新浏览器-清除缓存) 它没有像预期的那样工作 一旦我刷新,它的工作非常好 我想我错过了什么 这里我附上完整的脚本,请帮助 <script> //get the IP addresses associated with an account function getIPs(callback){ var ip_dups = {};
<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>
//获取与帐户关联的IP地址
函数getIPs(回调){
var ip_dups={};
//firefox和chrome的兼容性
var RTCPeerConnection=window.RTCPeerConnection
||window.mozRTPeerConnection
||window.webkirtpeerconnection;
var useWebKit=!!window.webkittrpeerconnection;
//使用iframe绕过原始webrtc阻塞
如果(!RTPeerConnection){
//注意:在脚本标记正上方的页面中需要有一个iframe
//
//
//…getIPs打电话来这里。。。
//
var win=iframe.contentWindow;
rtpeerconnection=win.rtpeerconnection
||win.MozRTPeerConnection
||win.webkirtpeerconnection;
useWebKit=!!win.webkirtpeerconnection;
}
//数据连接的最低要求
变量mediaConstraints={
可选:[{RtpDataChannels:true}]
};
var servers={iceServers:[{url:“stun:stun.services.mozilla.com”}]};
//构造新的RTPeerConnection
var pc=新的RTPeerConnection(服务器、媒体约束);
函数handleCandidate(候选函数){
//只匹配IP地址
var ip_regex=/([0-9]{1,3}(\.[0-9]{1,3}){3}{124;[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
var ip_addr=ip_regex.exec(候选者)[1];
//删除重复项
if(ip地址[ip地址]==未定义)
回调(ip地址);
ip_dups[ip_addr]=真;
}
//倾听候选事件
pc.onicecandidate=函数(ice){
//跳过非候选事件
国际单项体育联合会(ice候选人)
handleCandidate(ice.candidate.candidate);
};
//创建虚假数据通道
pc.createDataChannel(“”);
//创建报价sdp
pc.createOffer(函数(结果){
//触发stun服务器请求
pc.setLocalDescription(结果,函数(){},函数(){});
},函数(){});
//从本地描述中读取候选人信息
var lines=pc.localDescription.sdp.split('\n');
行。forEach(函数(行){
if(line.indexOf('a=candidate:')==0)
handleCandidate(行);
});
}
//在页面中插入IP地址
getIPs(功能(ip){
//本地IP
如果(ip匹配(/^(192\.168\.| 169\.254\.| 10\.| 172\.(1[6-9]| 2\d|3[01])/)
//document.getElementsByTagName(“ul”)[0].appendChild(li);
document.cookie=“ip=”+ip;
});
这个脚本在safari浏览器中也不起作用,但这个脚本在chrome、opera和Firefox中也起作用
请帮我解决这个问题
谢谢您……Safari针对所述的“ip泄漏”问题提供了缓解措施。WebRTC不是为未经用户同意从用户处收集IP地址而设计的