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:
  1. <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:
  1. <a href="#" onclick="addbookmark();">Kedvencekhez!</a>  
, ahol az addbookmark függvény az alábbi (külső állományból meghívva):
  1. function addbookmark() {  
  2.     url='http://www.kedvencoldal.hu/';  
  3.     title='Kedvenc oldal';  
  4.     if (window.sidebar) {  
  5.         window.sidebar.addPanel(title, url,'');  
  6.     }  
  7.     if (window.external) {  
  8.         window.external.AddFavorite(url, title);   
  9.     }  
  10.     if(window.opera && window.print) {  
  11.         return true;   
  12.     }  
  13. }  
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:
  1. <a href="#" id="favourite" ondblclick="addbookmark();">Kedvencekhez!</a>  
És van egy Javascript-kódom:
  1. function addEvent(obj, evType, fn) {  
  2.   if (obj.addEventListener) {  
  3.     obj.addEventListener(evType, fn, true);  
  4.     return true;  
  5.   } else if (obj.attachEvent) {  
  6.     var r = obj.attachEvent("on"+evType, fn);  
  7.     return r;  
  8.   } else {  
  9.     return false;  
  10.   }  
  11. }  
  12. function addbookmark() {  
  13.     url='http://www.kedvencoldal.hu/';  
  14.     title='Kedvenc oldal';  
  15.     if (window.sidebar) {  
  16.         window.sidebar.addPanel(title, url,'');  
  17.     }  
  18.     if (window.external) {  
  19.         window.external.AddFavorite(url, title);   
  20.     }  
  21.     if(window.opera && window.print) {  
  22.         return true;   
  23.     }  
  24. }  
  25. 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:
  1. function d(obj) {  
  2.     return document.getElementById(obj) != null ? document.getElementById(obj) : false;  
  3. }  
  4.   
  5. function addEvent(obj, evType, fn) {  
  6.   if (obj.addEventListener) {  
  7.     obj.addEventListener(evType, fn, true);  
  8.     return true;  
  9.   } else if (obj.attachEvent) {  
  10.     var r = obj.attachEvent("on"+evType, fn);  
  11.     return r;  
  12.   } else {  
  13.     return false;  
  14.   }  
  15. }  
  16. function addbookmark() {  
  17.     url='http://www.kedvencoldal.hu/';  
  18.     title='Kedvenc oldal';  
  19.     if (window.sidebar) {  
  20.         window.sidebar.addPanel(title, url,'');  
  21.     }  
  22.     if (window.external) {  
  23.         window.external.AddFavorite(url, title);   
  24.     }  
  25.     if(window.opera && window.print) {  
  26.         return true;   
  27.     }  
  28. }  
  29.   
  30. intervall1 = setInterval(function () {  
  31.     if (d('favourite')) {  
  32.         clearInterval(intervall1);  
  33.         addEvent(d('favourite'),'keydown',addbookmark);  
  34.     }  
  35. }, 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:
  1. function setStartPage() {  
  2.     if (window.external) {  
  3.         d('startpage').style.behavior='url(#default#homepage)';  
  4.         d('startpage').setHomePage('http://www.kezdolap.hu/');  
  5.     }  
  6. }  
  7. intervall2 = setInterval(function () {  
  8.     if (d('startpage')) {  
  9.         clearInterval(intervall2);  
  10.         addEvent(d('startpage'),'click',setStartPage);  
  11.     }  
  12. }, 10)  
HTML:
  1. <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:
  1. function addEventHandler(obj, eventType, handler) {  
  2.     if (window.opera && obj.addEventListener) {  
  3.         obj.addEventListener(eventType, handler, false);  
  4.         return true;  
  5.     } else if (obj.addEventListener) {  
  6.         obj.addEventListener(eventType, handler, true);  
  7.         return true;  
  8.     } else if (obj.attachEvent) {  
  9.         var r = obj.attachEvent("on"+eventType, handler);  
  10.         return r;  
  11.     } else {  
  12.         return false;  
  13.     }  
  14. }  
Felhő