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("");
		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();

Použití pro toplist.cz

 


Komentáře

  1. 1 oktam 23.12.04, 01:12:09
    FB

    v xhtml sa spravne pouzivaju obycajne alebo dvojite uvodzovky?
    diky

  2. 2 Fred 23.12.04, 01:12:12
    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, 02:12:18
    FB

    [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:12:31
    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, 02:02:44
    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:02:38
    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, 02:02:18
    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.