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.