ugrás a tartalomhoz

Kezdőoldalnak/kedvencekhez adás - kicsit diszkrétebben?

Dj Faustus · 2006. Aug. 15. (K), 23.20
Üdv mindenkinek!

Bizonyára sokan ismerik a (csak IE alatt működő) kezdőoldalnak adást:
<a href="#" onclick="this.style.behavior='url(#default#homepage)'; this.setHomePage('http://www.kezdolap.hu/');">Kezdőlapnak! (Csak IE alatt működik!)</a>
, illetve a kedvencekhez (könyvjelzőnek) való felvételt:
<a href="#" onclick="addbookmark();">Kedvencekhez!</a>
, ahol az addbookmark függvény az alábbi (külső állományból meghívva):
function addbookmark() {
	url='http://www.kedvencoldal.hu/';
	title='Kedvenc oldal';
	if (window.sidebar) {
		window.sidebar.addPanel(title, url,'');
	}
	if (window.external) {
		window.external.AddFavorite(url, title); 
	}
	if(window.opera && window.print) {
		return true; 
	}
}
Hogyan lehetne a két fent említett Javascript-megoldást kicsit diszkrétebben (már amennyire diszkréten lehet), az XHTML kódot az onclick eseményektől kicsit "megszabadítottabban" megoldani?
 
1

Így

sly · 2006. Aug. 15. (K), 23.47
http://weblabor.hu/cikkek/diszkretjavascript
2

Már régebben olvastam, alkalmaztam - de most nem működik

Dj Faustus · 2006. Aug. 16. (Sze), 01.36
Már régebben olvastam ezt a leírást, többször alkalmaztam sikerrel (inkább load eseményeknél), de most valahogy nem működik.

Szóval van egy linkem:
<a href="#" id="favourite" ondblclick="addbookmark();">Kedvencekhez!</a>
És van egy Javascript-kódom:
function addEvent(obj, evType, fn) {
  if (obj.addEventListener) {
    obj.addEventListener(evType, fn, true);
    return true;
  } else if (obj.attachEvent) {
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    return false;
  }
}
function addbookmark() {
    url='http://www.kedvencoldal.hu/';
    title='Kedvenc oldal';
    if (window.sidebar) {
        window.sidebar.addPanel(title, url,'');
    }
    if (window.external) {
        window.external.AddFavorite(url, title); 
    }
    if(window.opera && window.print) {
        return true; 
    }
}
addEvent(document.getElementById('favourite'), 'click', addbookmark);
Szimpla kattintás esetén nincs siker, dupla kattintás esetén igen.

A Firebug hibára gyanakszik: obj has no properties - tehát a document.getElementById körül van a hiba, viszont a Mozilla DOM dokumentációjában van hasonló példa (addEventListener+document.getElementById).

Hol írhattam el?
3

Megoldásom

sly · 2006. Aug. 16. (Sze), 02.03
Mivel a head-ban van a js ezért még az elött lefut, hogy létre jött volna az elem.

Én igy oldottam meg:

function d(obj) {
	return document.getElementById(obj) != null ? document.getElementById(obj) : false;
}

function addEvent(obj, evType, fn) {
  if (obj.addEventListener) {
    obj.addEventListener(evType, fn, true);
    return true;
  } else if (obj.attachEvent) {
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    return false;
  }
}
function addbookmark() {
    url='http://www.kedvencoldal.hu/';
    title='Kedvenc oldal';
    if (window.sidebar) {
        window.sidebar.addPanel(title, url,'');
    }
    if (window.external) {
        window.external.AddFavorite(url, title); 
    }
    if(window.opera && window.print) {
        return true; 
    }
}

intervall1 = setInterval(function () {
	if (d('favourite')) {
		clearInterval(intervall1);
		addEvent(d('favourite'),'keydown',addbookmark);
	}
}, 10)
4

Köszi, bevált.

Dj Faustus · 2006. Aug. 16. (Sze), 02.46
A kezdőoldalnak való beállítás meg így fog kinézni.
Javascript:
function setStartPage() {
	if (window.external) {
		d('startpage').style.behavior='url(#default#homepage)';
		d('startpage').setHomePage('http://www.kezdolap.hu/');
	}
}
intervall2 = setInterval(function () {
	if (d('startpage')) {
		clearInterval(intervall2);
		addEvent(d('startpage'),'click',setStartPage);
	}
}, 10)
HTML:
<a href="#" id="startpage">Kezdőlapnak!</a>
Mégegyszer köszönöm.
5

opera - useCapture bug

Hodicska Gergely · 2006. Aug. 17. (Cs), 01.04
Ha már figyelsz az Operára, akkor érdemes arra is figyelni, hogy Opera alatt nem működik az addEventListener, ha a useCapture paraméter értéke true. Ezért az addEvent módosítani kell:
function addEventHandler(obj, eventType, handler) {
	if (window.opera && obj.addEventListener) {
		obj.addEventListener(eventType, handler, false);
		return true;
	} else if (obj.addEventListener) {
		obj.addEventListener(eventType, handler, true);
		return true;
	} else if (obj.attachEvent) {
		var r = obj.attachEvent("on"+eventType, handler);
		return r;
	} else {
		return false;
	}
}
Felhő