NAVRCHOLU.cz a TOPLIST.cz - nové verze měřících kódů
Technologie
23.12.04
Přepsal jsem kód pro NAVRCHOLU.cz a TOPLIST.cz tak, aby byl kompatibilní se všemi browsery, a zlepšil podporu pro MSIE. Problém, vypozorovaný v reálu, byl v tom, že Opera i Firefox / Mozilla, když se pomocí DOM JavaScriptu změní src
u tagu img
, tak načtou až tento nový obrázek (protože obrázky načítají v application/xhtml+xml
až po proběhnutí DOM skriptů), kdežto MSIE jej načítá dvakrát, poprvé s URL (src
) původním, a podruhé s URL změněným DOM skriptem, po dokončení načtení stránky.
Tak jsem obrázek z XHTML kódu úplně vydělal, a tvoří se pomocí appendChild(createNewEle('img'))
, s tím, že statistika je teď přesná ve všech browserech (ale načítá se pochopitelně až po natažení celé stránky i v MSIE).
Kód pro navrcholu.js
// (c) Radek HULAN, http://hulan.cz/ // This work is licensed under the Creative Commons Attribution License. // // NAVRCHOLU.cz statistics that works under XHTML 1.1 served with // MIME type application/xhtml+xml as well as text/html MIME type. // helper functions var isXHTML; function createNewEle(ele){ if(isXHTML) return document.createElementNS('http://www.w3.org/1999/xhtml', ele); else return document.createElement(ele); }; // navrcholu.cz code function navrcholu(){ var ele=document.getElementById('navrcholu'); if (!ele) return; isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName); // navrcholu.cz id from title var id=parseInt(ele.getAttribute('title')); if (!id) alert('TITLE attribute does not contain your NAVRCHOLU.cz ID!'); // some variables var n=navigator; var p=document; var c,t,b,j,m,r,y,d,x,w; d=x=w=j=0; // detect flash plugin in MSIE if(n.appVersion.indexOf("MSIE")>=0 && n.appVersion.indexOf("Win")>=0 && n.userAgent.indexOf("Opera")<0) { p.writeln(""); p.writeln("on error resume next"); p.writeln("For i=7 to 4 Step -1"); p.writeln(" If IsObject(CreateObject(\"ShockwaveFlash.ShockwaveFlash.\" & i)) Then"); p.writeln(" n3f8q=i"); p.writeln(" Exit For"); p.writeln(" End If"); p.writeln("Next"); p.writeln(""); } else eval("var n3f8q=0"); // detect flash in other browsers if( n.plugins && n.plugins["Shockwave Flash"]){ t=n.plugins["Shockwave Flash"].description; n3f8q=parseInt(t.charAt(t.indexOf(".")-1)); } // get other vars m=(n.userAgent.substring(0,8)=="Mozilla/") ? n.userAgent.substring(8,9) : 4; if(m>2) j=(n.javaEnabled()) ? 1 : 0; r=window.top.document.referrer; if(m>3 && screen){ d=screen.colorDepth; if(d==0) d=screen.pixelDepth; x=screen.width; w=(p.all) ? top.document.body.clientWidth:top.innerWidth; } y=new Date(); y.setTime(y.getTime()-31536000000); p.cookie="nvt=1"; c=(p.cookie.indexOf("nvt") != -1)?1:0; p.cookie="nvt=1; expires="+y.toGMTString(); // set new A attributes ele.href='http://navrcholu.cz/Statistika/'+id+'/'; ele.setAttribute('title','NAVRCHOLU.cz'); // create IMG var img=ele.appendChild(createNewEle('img')); img.setAttribute('alt','NAVRCHOLU.cz'); img.setAttribute('style','width:80px;height:15px'); img.setAttribute('src','http://c1.navrcholu.cz/hit?site='+id+';t=o80;' +'fv='+n3f8q+';js='+j+';cs='+c+';ref='+escape(r)+';cd=' +d+';sx='+x+';wx='+w+';jss=1;r='+Math.random()); } navrcholu();
Použití pro navrcholu.cz
Kód pro toplist.js
// (c) Radek HULAN, http://hulan.cz/ // This work is licensed under the Creative Commons Attribution License. // // TOPLIST.cz statistics that works under XHTML 1.1 served with // MIME type application/xhtml+xml as well as text/html MIME type. // helper functions var isXHTML; function createNewEle(ele){ if(isXHTML) return document.createElementNS('http://www.w3.org/1999/xhtml', ele); else return document.createElement(ele); }; function toplist(){ var ele=document.getElementById('toplist'); if (!ele) return; isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName); // toplist.cz id from title var id=parseInt(ele.getAttribute('title')); if (!id) alert('TITLE attribute does not contain your TOPLIST.cz ID!'); var img=ele.getElementsByTagName('img'); // set new A attributes ele.href='http://toplist.cz/stat/'+id; ele.setAttribute('title','TOPLIST.cz'); // create IMG var img=ele.appendChild(createNewEle('img')); img.setAttribute('alt','TOPLIST.cz'); img.setAttribute('style','width:88px;height:120px'); img.setAttribute('src','http://toplist.cz/count.asp?id='+id +'&logo=bc' +'&http='+escape(document.referrer) +'&wi='+escape(window.screen.width) +'&he='+escape(window.screen.height) +'&cd='+escape(window.screen.colorDepth) +'&t='+escape(document.title)); } toplist();
v xhtml sa spravne pouzivaju obycajne alebo dvojite uvodzovky?
diky
ten toplist ppoužívám jinak
... promiň, kód jsem nezveřejnil, nabouralo do stránku, ale tej sem klidně odkaz...
Ale díky za navrcholu s tím jsem si nevěděl rady, použil jsem to tady http://bramberk.unas.cz/switcher.js... , po svátcích si budu muset vyhodit blokaci počítadel ze souboru hosts (http://www.mvps.org/winhelp2002/hosts.htm...) :-) a celý to dopilovat.
OT: nemohla by se ta hláška o tom robotovi objevit někde tady nalevo vedle inputu text, když totiž zapomenu vyplnit antispamovou kontrolu ztratím celý komentář a musím ho psát znovu
[1] je to jedno, můžeš používat uvozovky i apostrofy
[2] pokud špatně zadáš kontrolu proti spamu, stačí stisknout BACK klávesu, a máš tam znovu okno komentáře, i s textem, a stačí kontrolu proti spamu opravit..
Koukám, že už tu není navrcholu, chci se zeptat, taky to dělalo problémy v MSIE v kombinaci s google scriptama? Mně se to sekalo v kombinaci s analytics a vypadá to, že problém byl v tom vbscriptu, prostě jsem se na něj vykašlal a hodil jsem tam if(p.uniqueID && n.appVersion.indexOf("Win")>=0){n3f8q=8}, protože info o flashi nepotřebuju. Ale ta chyba co to vyhazovalo byla fakt divná: MSIE Nemůže nalézt adresu http://www.domena.cz/. Ta tečka na konci je ta chyba, nepřišel jsem na to proč. Občas to šlo celý do kytek a zdroják té stránky byl právě ten obsah toho writeln.
Je to skvělý kód na ten toplist, ale čistě laická otázka. Kde a jak můžu v tomto kódu změnit ikonu (neboli img), který chci aby odkaz ukazoval. Chěl bych například použít ikonu s černým pozadím, nebo jinou, kterou nabízí toplist.cz
Skoušel jsem zde např.: <img src='http://toplist.cz/count.asp?id=64941&logo=bc'nahradit... logo=1 apodobně stejně tak i v souboru toplist.js a beze změn. Vy už ten script čtete jak noviny, ale pro mě to je hebrejskej věstník -:) Snažím se alespoň kusy toho kódu pochopit, ale marně.
[5] Co tak zkusit oficiální cestu: http://toplist.cz/edit/?a=l ? Stačí tam zadat tvoje ID, kliknout na vybranou reprezentaci a zkopírovat html.
[6] Oficiální cesta, hm já vím, ale používám na stránky které dělám editor který generuje moc pěkný XHTML 1.0 strict kod a proto se mi líbí spíše zde uváděné validní řešení toplistu. Takže moc dík..to si mi moc nepomoh. Třeba na to příjdu.