Pulp.
Bon, je m'excuse pour le titre, j'édite si j'ai mieux, mais j'avoue que la je suis bouche bée devant ce probleme.
Le problème ne m'embete pas vraiment, il rend juste mon code plus sale qu'il ne l'ait déjà (Je referais tout au propre, ce n'est pas le probleme).
Bon voilà le code qui m'embete un peu :
1 2 3 4 | if(!ZDSNotif.BrowserOverlay.showNotif) { dropdown.innerHTML = htmlNotif; dropdown.innerHTML == htmlNotif ? alert('ok') : alert('wtf?'); } |
Le probleme avec ce code est qu'il m'affiche wtf?. Et j'avoue ne pas comprendre. Voici la fonction en détail (je répète, c'est sale) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | function getNotifAndMP() { var toolbarbutton = document.getElementById('zds-notif-button'); var dropdown = document.querySelector('.dropdown'); var oReq = new XMLHttpRequest(); oReq.open("GET", 'http://zestedesavoir.com', true); oReq.onload = function () { //Parse la page var DOMPars = HTMLParser(this.responseText.replace(/href=\"\//g, 'href="http://zestedesavoir.com/')); var isConnected = false; for(var i = 0; i < DOMPars.getElementsByClassName('dropdown').length; ++i) { //Notifications if(DOMPars.getElementsByClassName('dropdown')[i].innerHTML.indexOf('Notifications') != -1) { var htmlNotif = DOMPars.getElementsByClassName('dropdown')[i].innerHTML; //var notiflab = document.querySelector('.notiflab'); if(htmlNotif.split("<a").length-2 > 0) toolbarbutton.setAttribute('image', 'chrome://zds-notif/skin/images/icone_n_20.png'); else if(!ZDSNotif.BrowserOverlay.isMP) toolbarbutton.setAttribute('image', 'chrome://zds-notif/skin/images/icone_20.png'); //notiflab.innerHTML = (htmlNotif.split("<a").length-2).toString(); htmlNotif = htmlNotif.substring(htmlNotif.indexOf('<ul'), htmlNotif.indexOf('</ul>')+5); //Convert HTML in XUL htmlNotif = htmlNotif.replace(/<span/g, '<html:span'); htmlNotif = htmlNotif.replace(/<\/span/g, '</html:span'); htmlNotif = htmlNotif.replace(/<ul/g, '<html:ul'); htmlNotif = htmlNotif.replace(/<\/ul/g, '</html:ul'); htmlNotif = htmlNotif.replace(/<li/g, '<html:li'); htmlNotif = htmlNotif.replace(/<\/li/g, '</html:li'); htmlNotif = htmlNotif.replace(/<a/g, '<html:a'); htmlNotif = htmlNotif.replace(/<\/a/g, '</html:a'); htmlNotif = htmlNotif.replace(/href=\"\//g, 'href="http://zestedesavoir.com/'); htmlNotif = htmlNotif.replace(/src=\"\//g, 'src="http://zestedesavoir.com/'); htmlNotif = htmlNotif.replace('<img(.*)>', ''); if(ZDSNotif.BrowserOverlay.showNotif) dropdown.innerHTML = htmlNotif; isConnected = true; } //Messagerie if(DOMPars.getElementsByClassName('dropdown')[i].innerHTML.indexOf('Messagerie') != -1) { var htmlNotif = DOMPars.getElementsByClassName('dropdown')[i].innerHTML; //var mplab = document.querySelector('.mplab'); if(htmlNotif.split("<a").length-2 > 0) { toolbarbutton.setAttribute('image', 'chrome://zds-notif/skin/images/icone_m_20.png'); ZDSNotif.BrowserOverlay.isMP = true; } else { toolbarbutton.setAttribute('image', 'chrome://zds-notif/skin/images/icone_20.png'); ZDSNotif.BrowserOverlay.isMP = false; } //mplab.innerHTML = (htmlNotif.split("<a").length-2).toString(); htmlNotif = htmlNotif.substring(htmlNotif.indexOf('<ul'), htmlNotif.indexOf('</ul>')+5); //Convert HTML in XUL htmlNotif = htmlNotif.replace(/<span/g, '<html:span'); htmlNotif = htmlNotif.replace(/<\/span/g, '</html:span'); htmlNotif = htmlNotif.replace(/<ul/g, '<html:ul'); htmlNotif = htmlNotif.replace(/<\/ul/g, '</html:ul'); htmlNotif = htmlNotif.replace(/<li/g, '<html:li'); htmlNotif = htmlNotif.replace(/<\/li/g, '</html:li'); htmlNotif = htmlNotif.replace(/<a/g, '<html:a'); htmlNotif = htmlNotif.replace(/<\/a/g, '</html:a'); htmlNotif = htmlNotif.replace(/href=\"\//g, 'href="http://zestedesavoir.com/'); htmlNotif = htmlNotif.replace(/src=\"\//g, 'src="http://zestedesavoir.com/'); htmlNotif = htmlNotif.replace('<img(.*)>', ''); if(!ZDSNotif.BrowserOverlay.showNotif) { dropdown.innerHTML = htmlNotif; dropdown.innerHTML == htmlNotif ? alert('ok') : alert('wtf?'); } isConnected = true; } } var toParse = dropdown.innerHTML; //Si on est déconnecté. if(!isConnected) { dropdown.innerHTML = '<html:a href="http://zestedesavoir.com/membres/connexion/?next=/" class="dropdown-link-all">Connexion</html:a>'; toolbarbutton.setAttribute('image', 'chrome://zds-notif/skin/images/icone_20_logout.png'); } else { if(ZDSNotif.BrowserOverlay.showNotif) dropdown.innerHTML += '<html:a href="http://zestedesavoir.com/forums/notifications/" class="dropdown-link-all">Toutes les notifications</html:a>'; else dropdown.innerHTML += '<html:a href="http://zestedesavoir.com/mp/" class="dropdown-link-all">Tous les messages</html:a>'; } var Anchors = document.getElementsByTagName("html:a"); for (var i = 0; i < Anchors.length ; i++) Anchors[i].addEventListener("click", linkClick, false); var tempAnchors = document.getElementsByTagName("a"); for (var i = 0; i < tempAnchors.length ; i++) tempAnchors[i].addEventListener("click", linkClick, false); }; oReq.send(null); } |
Encore quelques détails :
+ htmlNotif contient donc du XUL. Il ressemble à : "<html:a href="blabla">blabla</html:a>" (bon, il est plus complet mais voilà).
+ Après l'instruction dropdown.innerHTML = htmlNotif; J'ai remarqué que dropdown contient htmlNotif non pas en XUL mais en HTML !!! J'ai l'impression que innerHTML convertit, mais c'est débile parce que lorsqu'on fait :
1 | dropdown.innerHTML += '<html:a href="http://zestedesavoir.com/mp/" class="dropdown-link-all">Tous les messages</html:a>'; |
On a bien du XUL à l'intérieur de dropdown.
Voilà ma petite découverte que je ne comprends pas. Avez-vous une idée ?
AmarOk