J'écris ce petit message après deux jours de galère et de recherche intensive.
Voilà, je vous explique, après de longue recherche ,j'ai, enfin réussi à trouver un script sur un site espagnol pour récuperer l'adresse IP Locale du visiteur, mais cela ne fonctionne pas sur mobile, edge ou IE (je sais pas pourquoi) ni sur Opéra quand le VPN est activé (ce qui est normal)
Je cherche donc un moyen de faire un display none si la valeur est null ou indefinie
D'après les commentaires du script, l'iframe est la pour que le script marche, mais il fonctionne aussi bien sans le mettre
Et mon Javascript:
//On obtiens l'adresse IP:
function getIPs(callback){
var ip_dups = {};
//Compatibilité exclusive de firefox et chrome, l'utilisateur @guzgarcia à partager ce lien très utile: http://iswebrtcreadyyet.com/
var RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
var useWebKit = !!window.webkitRTCPeerConnection;
//bypass naive webrtc blocking using an iframe
if(!RTCPeerConnection){
//NOTE: Tu as besoin d'avoir une frame dans la page, exactement au dessus de l’étiquette script
//
//<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
//<script>... elle apelle la fonction getIPs ici...
//
var win = iframe.contentWindow;
RTCPeerConnection = win.RTCPeerConnection
|| win.mozRTCPeerConnection
|| win.webkitRTCPeerConnection;
useWebKit = !!win.webkitRTCPeerConnection;
}
//conditions minimum pour la connexion des données
var mediaConstraints = {
optional: [{RtpDataChannels: true}]
};
var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
//construccion de un nouveau RTCPeerConnection
var pc = new RTCPeerConnection(servers, mediaConstraints);
function handleCandidate(candidate){
// nous sommes d'accord avec l'adresse IP
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];
//On supprime les dupliqué
if(ip_dups[ip_addr] === undefined)
callback(ip_addr);
ip_dups[ip_addr] = true;
}
//On ecoute les événements candidats
pc.onicecandidate = function(ice){
//On mets de côté les événements qui ne sont pas candidats
if(ice.candidate)
handleCandidate(ice.candidate.candidate);
};
//On crée le canal de données
pc.createDataChannel("");
//On crée un offer sdp
pc.createOffer(function(result){
//Nous tirons la pétition (request) al stun server (pour mieux comprendre, on doit voir la documentation de WebRTC.
pc.setLocalDescription(result, function(){}, function(){});
}, function(){});
//On attends un moment pour laisser le temps que tout se complète:
setTimeout(function(){
//On lit l'information du candidat depuis la description local
var lines = pc.localDescription.sdp.split('\n');
lines.forEach(function(line){
if(line.indexOf('a=candidate:') === 0)
handleCandidate(line);
});
}, 1000);
}
//L'heure de la vérite est arrivé! On va essayé: avec ça on verra notre IP Locale:
getIPs(function(ip){
document.getElementById("ip1234").innerHTML = ip ;
//Si la variable est NULL, indefini ou rienon fait un display=none:
if(typeof ip === "undefined" || ip === null || ip === "")
{
document.getElementById("ip1").style.display="none";
console.log("Display none");
}
else
{
document.getElementById("ip1").style.display="block";
console.log("Display block");
}
});
Voilà un peu mon problème
J'espère que le script en lui même fera des heureux car moi j'ai cherché longtemps avant de le trouver.
Et surtout, que quelqu'un aura une idée pour mon problème.
ps: je vais éditer pour traduire les commentaire du script
- Edité par Aton Trencavel 27 juillet 2017 à 17:38:03
Je n'ai pas de talents particuliers. Je suis juste passionnément curieux. Albert Einstein
Je pense que tu fais ta condition sur le mauvais élément, je ferai la condition sur l'id ip1234 plus que sur l'id ip1 puisque c'est cet id qui récupère la valeur.
L'id ip1 sera toujours défini puisqu'il ne récupère aucune valeur, à aucun moment contrairement à l'id ip1234.
Du coup, tu dois changer d'id dans ta condition et mettre en entre les accolades un display="none" sur l'id ip1.
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
/Aton8181/pen/gxpLrX?editors=1010:80 GET https://www.google-analytics.com/analytics.js net::ERR_BLOCKED_BY_ADBLOCKER
everypage-c121098….js:3 GET https://srv.buysellads.com/ads/CVAD4K7N.json?callback=CPAdsinsertAd&forcena…66.70.98&callback=jQuery21103889416789499607_1501237560122&_=1501237560123 net::ERR_BLOCKED_BY_ADBLOCKER
Et sur Edge:
HTML1500: La balise ne peut pas se fermer automatiquement. Utilisez une balise de fermeture explicite.
SEC7131: La sécurité d’un IFrame en mode Bac à sable (sandbox) est potentiellement compromise en autorisant l’accès au script et de même origine.
SCRIPT57357: Impossible d’effectuer l’opération à cause de l’erreur suivante c004e00d.
Donc j'en déduit que si il ne me renvois pas la longueur de la variable, même si mon if est mal écrit (ça je n'en doute pas, car je suis une bille en JS) le problème est peu être ailleurs.
- Edité par Aton Trencavel 28 juillet 2017 à 12:41:43
Je n'ai pas de talents particuliers. Je suis juste passionnément curieux. Albert Einstein
Pour Internet Explorer est provoqué à cause de google analytics, apparament tu as un bloqueur de publicité (adbblock?), si tu en as un désactive le.
Pour edge, tu dois enlever le iframe et le remplacer par autre chose puisque edge te bloque de faire ce que tu veux faire avec la balise iframe par manque de sécurité.
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
trés bien je vais regarder ceci.
Merci d'avoir regarder.
Et pour le code en lui même, as-tu une idée de mon erreur, car rien n'y fait je trouve pas
Je n'ai pas de talents particuliers. Je suis juste passionnément curieux. Albert Einstein
javascript >> if null display none
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.