NAVRCHOLU.cz a TOPLIST.cz - nové verze měřících kódů

MyEgo.cz

home foto blogy mywindows.cz kontakt

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("<s"+"cript type='text/vbscript'>");
		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("</s"+"cript>"); 
	} 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

<a id='navrcholu' title='77391'></a> 
<script type='text/javascript' src='navrcholu.js'></script>
<noscript> <div>
<a href='http://navrcholu.cz/'>
<img src='http://c1.navrcholu.cz/hit?site=77391;t=o80;ref=;jss=0'	alt='NAVRCHOLU.cz' />
</a>
</div> </noscript>

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
		+'&amp;logo=bc'
		+'&amp;http='+escape(document.referrer)
		+'&amp;wi='+escape(window.screen.width)
		+'&amp;he='+escape(window.screen.height)
		+'&amp;cd='+escape(window.screen.colorDepth)
		+'&amp;t='+escape(document.title));
}
toplist();

Použití pro toplist.cz

<a id='toplist' title='64941'></a> 
<script type='text/javascript' src='toplist.js'></script>
<noscript> <div>
<a href='http://www.toplist.cz/'>
	<img src='http://toplist.cz/count.asp?id=64941&amp;logo=bc' alt='TOPLIST.cz' />
</a>
</div> </noscript>

Komentáře

  1. 1 oktam 23.12.04, 13:09:14
    FB

    v xhtml sa spravne pouzivaju obycajne alebo dvojite uvodzovky?
    diky

  2. 2 Fred 23.12.04, 13:12:46
    FB

    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

  3. 3 Radek Hulán 23.12.04, 14:18:26

    [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..

  4. 4 Fred 21.12.06, 08:31:25
    FB

    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.

  5. 5 Jiří Königsmark 03.02.09, 14:44:10
    FB

    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ě.

  6. 6 Glos Robert 04.02.09, 08:38:34
    FB

    [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.

  7. 7 Jiří Königsmark 05.02.09, 14:18:53
    FB

    [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.

Nový komentář

Pro přidání komentáře se musíte nejdříve  registrovat Facebookem

Banan.cz