Zapp: IE-Bookmarklet

Beitrag lesen

Hallo Leute!

Ich habe etwas mit Bookmarklets rumgespielt und war überrascht, wie weit sich das Forum damit verbiegen läßt. Man kann die Klicks abfangen, die gelinkten Seiten dann in einem selbst definierten Fenster öffnen und nach dem Laden fast beliebig verändern.

Mein Bookmarklet kann

  • Nachrichten in JS-Fenstern öffnen
  • in den Nachrichten den gesamten Thread anzeigen
  • geöffnete Nachrichten in der Hauptdatei als gelesen markieren
  • die Formularfelder vorbelegen
  • unverlinkte URLs verlinken (Klick auf "http" bzw. "www")
  • gepostete / Homepage-Links in neuen Fenstern öffnen

Es kann leider nicht

  • Links zu Nachrichten zeigen, die neuer sind als die Hauptdatei
  • automatisch geladen werden

Nach jedem Reload der Hauptdatei muß es also manuell nachgeladen werden. Dazu hatte ich einiges probiert, doch ohne Erfolg. Vielleicht wäre der Zugriff auf ein Bookmarklet über JS auch eine Sicherheitslücke, da die Bookmarklets ja erweiterte Rechte haben.
Oder gibts da vielleicht doch 'ne Möglichkeit?

Hier ist das Skript (getestet mit IE 5.0 + 5.5):

[InternetShortcut]
URL=javascript:N='Jeeves';E='spam@all.de';U='www.home77.de';G='';P='scrollbars,status,resizable';d=document;b='_blank';d.body.onclick=J;function J(x){B=x?x:window;C=B.event.srcElement;K=B.d.all.tags;if(!K('DL')[0].contains(C)){if(x&&K('TT')[0].contains(C)){if(C.href)C.target=b;else with(B){r=d.body.createTextRange();r.moveToPoint(event.x,event.y);r.expand('word');if(r.text.charAt(0)=="'")r.moveStart('character',1);if(r.text.substr(0,4)=='http'||r.text=='www'){r.moveEnd('sentence',1);n=r.text;u=['\r','\n','"',"'",',','[','(',' ',')',']'];for(i in u)n=n.split(u[i])[0];r.findText(n);r.execCommand('CreateLink',false,n.charAt(0)=='w'?'http://'+n:n);}}}return true;}L=C.href?C:C.parentNode;if(L.href){S=[];T=C;while(T.parentNode.parentNode.tagName!='BODY'){D=0;while(T.previousSibling){D++;T=T.previousSibling;}S[S.length]=D;T=T.parentNode;}S.reverse();if(!x){V=open(L.href+'#a1','',P);R=T;}W=V.location;W.href=L.href+'#a1';I();return false;}}function I(){e=0;if(W.href==L.href+'#a1'&&V.document.all.bottom)setTimeout('Y()',50);else if(e<50){e++;setTimeout('I()',500);}}function Y(){V.d=V.document;p=V.d.all;if(p.url){W.hash='#a1';V.d.body.onclick=Q;p.name.value=N;p.email.value=E;p.url.value+=U;p.image.value+=G;M=p.tags;p.body.value='Hallo '+M('H2')[0].innerText.split(':')[0].split(' ')[0]+',\n\n'+p.body.value+'\n\nGrüße,\n '+N;with(M('P')[1])with(lastChild)if(tagName=='A')target=b;if(M('DL')[0])M('DL')[0].outerHTML='';M('H3')[0].outerHTML='<dl><dd id=X>'+R.innerHTML+'</dd></dl><h3>Eigene Antwort schreiben</h3>';t=[p.X,R];for(j in t){for(i in S)t[j]=t[j].childNodes[S[i]];t[j].style.color=j<1?'#ee6600':'#552200';}}}function Q(){if(!V.closed&&V.event)return(J(V));}void(0);

Um es so kurz wie möglich zu halten (mehr als 2073 Zeichen sind nicht erlaubt), sind alle Namen auf ein Zeichen gekürzt, so dass jetzt garantiert niemand mehr da durchsteigt. Bei Interesse könnte ich aber auch den Klartext posten.

Eine Frage habe ich noch: Die Funktion "gepostete URLs in Links umwandeln" finde ich gut, doch die Links posaunen den Referrer raus, was ja vielleicht nicht immer erwünscht ist. Wie aber kann ich das umgehen? Wird z.B. der Referrer auch bei open() übermittelt, oder wenn ich per location.href in ein blank geöffnetes Fenster lade?

Grüße aus Berlin,

Stefan