NAVRCHOLU.cz s application/xhtml+xml

MyEgo.cz

home foto blogy mywindows.cz kontakt

NAVRCHOLU.cz s application/xhtml+xml

V sobotu jsem se zaregistroval do statistik navrcholu.cz a dnes mi přišlo potvrzení registrace. Navrcholu.cz toho umí hodně, nicméně, jejich JavaScript pro měření byl plný write() a writeln(), takže jsem jej musel přepsat do DOM JavaScriptu, jinak by pochopitelně v XHTML 1.1 nefungoval (zabralo to 10 minut i s testováním).

Výsledek byl testován a funguje v Opeře 7.60 TP4, Firefoxu 1.0 (application/xhtml+xml), a rovněž v MSIE 6.0 (text/html).

Zde je 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.
//
//
// Usage - place this in your XHTHML 1.1 code:
//  
// 
// 

// 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í skriptu:

Vložte tento kód do Vašeho XHTML:

 

Pochopitelně, číslo 77391 upravte na Vaše číslo počítadla. Kód je pochopitelně napsaný tak, že funguje i při vypnutém JavaScriptu.


Doufám, že mě za tento kód, který by měl dodat navrcholu.cz, a ne já, bude třeba nabídnuta Profi statistika navrcholu.cz na rok zdarma. Přijmul bych to, a s radostí zveřejnil ;-)


Komentáře

  1. 1 noname 21.12.04, 12:12:23
    FB

    jojo, imho je navrcholu nejlepší statistika, ovšem mám problém, že s webem, kde ji používám a potřebuji nejnutněji už jsem se dostal na tak vysokou návštěvnost, že musím zvažovat, jestli raději koupit lepší katalogizaci na seznamu a nebo navrcholu. Teď mi skončila měsíční služba zdarma, takže asi půjdu do toho prvního a statistiky si udělám jinak. Když by blog:cms zaintegroval třeba něco jako http://awstats.sourceforge.net/,... tak bych ho měl snad ještě raději, než ho mám teď.

  2. 2 Radek Hulán 21.12.04, 12:12:28
    FB

    [1] awstats nemá co dělat v BLOG:CMS, ale například můj webhosting ji má ;-)

  3. 3 noname 21.12.04, 10:12:51
    FB

    [2] Já netvrdím, že by tam mělo být awstats, ale mohlo by tam být "něco jako awstats", které by využívalo integrace se systémem, takže by třeba třeba admin mohl vidět statistiky per článek, per kategorie, nebo per blog a mohlo by se těch dat i třaba dále využívat přes proměnné (zobrazovat nejhledanější slova k tomu článku, zobrazovat související dokumenty, obsahovat podmínky podle rozlišení, zobrazovat texty či reklamu dle hledaných slov atd.) Mnoho lidí nemá na výběr a nemá to štěstí na slušnou statistiku u svého poskytovatele.
    Samozřejmě by to byla spousta práce a určitě to pro blog:cms dělat nebudeš (i když pro fart by to myslím byla výborná funkce), pár publikačních systému nějakou statistiku v sobě má, ale není to asi nic bez čeho by se nedalo žít (ale mohlo by z toho být něco co nikdo nemá). Takt to ber jen jako povzdech. ;-)

  4. 4 Ján "johno" Suchal 21.12.04, 12:12:37
    FB

    Štatistiky sú veľmi zaujímavá vec. Hlavne keď sa na to použije trochu viac ako prosté priemerovanie čísel. Neviem či o takomto niečom sníva Profi štatistika, ale podľa mna je to prudko využiteľné.

  5. 5 Ján "johno" Suchal 21.12.04, 02:12:49
    FB

    Čo sa týka toho skriptu: Môžes pristupovať k DOM skôr ako pred eventom onload? Ja som teda hladal na nete a nič som o tom nenašiel.

    Podľa mňa sa funkcia navrcholu(); môže za určitých okolností spustiť skôr ako je natiahnutá stránka a teda nie je ešte prístupný DOM stránky. Potom tá funkcia skončí na druhom riadku.

    Neviem síce čo to spraví keď to dáš priamo do body tak ako to píšeš ty, čiže priamo za ten element, ale ja mám vo zvyku dávať všetky skripty do head tagu. Hovorí sa tomu separácia obsahu od správania. Podobne ako oddelenie vzhľadu od obsahu pomocou CSS.

    Elegantnejšie je teda spúštať funkcie čo manipulujú s DOM až potom ako nastane udalosť load. Ja všeobecne na manipuláciu s udalostami používam http://www.fczbkk.com/js/evt/evt.js...

  6. 6 Radek Hulán 21.12.04, 03:12:55
    FB

    [5] však ona se nespouští onload, ale IHNED jak se zavolá..

  7. 7 Ján "johno" Suchal 21.12.04, 03:12:59
    FB

    [6] No a to je práve ten problém. Je v tedy už dostupný DOM? Podľa mna je štandardne dostupný DOM až po onload evente.

  8. 8 Radek Hulán 22.12.04, 12:12:59
    FB

    [7] to nevím, ale je to dobrá otázka, jdu to vyzkoušet, mám ale pocit, že Opera je zde super v tom, že DOM je přístupný ihned, u Gecka ne..

  9. 9 Ján "johno" Suchal 22.12.04, 10:12:03
    FB

    [8] No neviem, či je to zase tak super. V tomto konkrétnom prípade asi áno, ale predstav si, že by si tak získaval čo ja viem kolekciu všetkých img elementov na stránke. V Opere podľa teba dostaneš len časť z nich. No, idem to skúsiť aj ja.