Bookmarklets in neuem Tab öffnen

  • Hallo,
    ich habe heute mein erstes 'eigenes' Bookmarklet zusammengebastelt (d.h. eins geklaut und dann modifiziert), bin damit auch zufrieden, nur eines bekomme ich nicht hin:
    Ich möchte, dass es sich in einem neuen Tab öffnet.
    Das tut es nämlich selbst dann nicht, wenn ich es mit dem mittleren Mausbutton anklicke ('normale' Bookmarks gehen dank TBE dann bei mir in einem neuen Tab auf.)
    Aber JavaScript ist ja für sowas regelrecht konzipiert, ich habe leider nur keine Ahnung davon. Also das Bookmarklet lautet bisher:

    javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);if(!s)s=prompt('Enter keywords:','');if(s)location='http://www.berlin.de/stadtplan/map.…e(s)+'&size=3x3';})())

    Oder ganz einfach:

    <a href="javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);if(!s)s=prompt('Enter keywords:','');if(s)location='http://www.berlin.de/stadtplan/map.…e(s)+'&size=3x3';})())" title="Adresse markieren und Bookmarklet klicken">Stadtplan Berlin</a>

    es bewirkt: Markiere eine Straßennamen (mit oder ohne Hausnummer), betätige das Bookmarklet und die Adresse wird im Berliner Stadtplan angezeigt. Ist nichts markiert, erscheint ein Eingabefenster, in das man dann die Adresse eingeben kann [Spart einen Ladevorgang der nicht gerde schnellen Stadtplanseite...]

    Wie muss ich das also modifizieren, dass sich nun ein neuer Tab / neues Fenster (ist egal, wird über TBE aufgefangen) öffnet?
    Allgemeine Links zu Tutorials über JavaScript für Anfänger sind auch willkommen.

    Danke,

    Bazon Bloch[/b]

  • update:

    Das "im neuen Fenster/Tab öffnen" Problem habe ich zwar noch nicht gelöst, aber mittlerweile habe ich eine Variante des Bookmarklets gebastelt, die nicht nur für Berlin praktisch ist, sondern für alle Städte, die in Stadtplandienst.de erfasst sind. Hier mal eine kleine Auswahl:

    <a href="javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);if(!s)s=prompt('Enter keywords:','');if(s)location='http://www.stadtplandienst.de/map.asp?sid=52…ken=GO&size=3x3';})())" title="Adresse markieren und klicken">Berlin Stadtplandienst</a>

    <a href="javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);if(!s)s=prompt('Enter keywords:','');if(s)location='http://www.stadtplandienst.de/map.asp?sid=52…ken=GO&size=3x3';})())" title="Adresse markieren und klicken">Hamburg Stadtplandienst</a>

    <a href="javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);if(!s)s=prompt('Enter keywords:','');if(s)location='http://www.stadtplandienst.de/map.asp?sid=52…ken=GO&size=3x3';})())" title="Adresse markieren und klicken">Köln Stadtplandienst</a>

    <a href="javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);if(!s)s=prompt('Enter keywords:','');if(s)location='http://www.stadtplandienst.de/map.asp?sid=52…ken=GO&size=3x3';})())" title="Adresse markieren und klicken">Saarbrücken Stadtplandienst</a>

    <a href="javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);if(!s)s=prompt('Enter keywords:','');if(s)location='http://www.stadtplandienst.de/map.asp?sid=52…ken=GO&size=3x3';})())" title="Adresse markieren und klicken">München Stadtplandienst</a>

    Hier zwar nur eine kleine Auswahl, aber die vorgegebene Stadt kann einfach im JavaScript Text (ziemlich weit hinten) durch eine andere Stadt ersetzt werden.

    Have Fun!! (und beantwortet meine ursprüngliche Frage :wink: )

  • update:
    Die Bookmarklets über stadtplandienst.de funktionieren nicht mehr. Ich vermute, dass die URL, die ich verwendete, nur temporär ist, wahrscheinlich zur Vermeidung von Deep-Links.
    Der im ersten Beitrag gepostete über Berlin.de funktioniert jedoch noch.
    Hier vielleicht eine Variante, die vielleicht dauerhaft funktionieren könnte:


    <a href="javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);if(!s)s=prompt('Bitte Adresse eingeben:','');if(s)location='http://www.berlin.de/stadtplan/map.…e(s)+'&size=3x3';})())" title="Adresse markieren und Bookmarklet klicken">Stadtplan Berlin</a>

    Ich habe die 'sid', ich vermute mal, das heißt Session ID, entfernt, bei mir zumindest funktioniert das im Moment (noch?)...

    Könnten die Stadtplanseiten eigentlich etwas gegen die Verwendung von Bookmarklets haben? (Wenn ja entferne ich sie hier natürlich, betone aber, dass ihre Veröffentlichung hier rein 'akademischer Natur' waren.)

    mfG,

    Bazon Bloch

  • update:

    habe es mittlerweile selbst geschafft, hier ist das Bookmarklet, das einen neuen Tab / ein neues Fenster öffnet::

    <a href="javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);if(!s)s=prompt('Nichts markiert, bitte Adresse eingeben:','');if(s)window.open('http://www.berlin.de/stadtplan/map.…=3x3','Fenster1');})())" title="Adresse markieren und Bookmarklet klicken">Stadtplan Berlin</a>

    (wie? Aufruf mit window.open(...,...))
    Etwas unschön dabei ist, dass das Tab, aus dem es geladen wurde, mit 'Stadtplan Berlin' beschriftet wurde, aber naja, vielleicht bekomme ich das auch noch hin...

    Beim stadtplandienst.de habe ich auch versucht, die sid zu entfernen, nutzt aber nichts. Vorerst also nur Berliner Stadtpläne, mir reicht's :wink:

    P.S.: Ich gebe ja zu, dass diese Frage wohl eher in ein Java Forum gepaßt hätte. Bookmarklets sind mir aber zunächst im Zusammenhang mit dem Firefox begegnet und ich dachte zunächst auch, es sei ein Problem des Firefox (öffnen im aktuellen Fenster trotz Mittelklicks)

  • :)

    noch'n update:

    das zuletzt gepostete Bookmarklet öffnet sich bei mehrmaligem Aufruf immer im selben Tab/Fenster (wegen konstanter Fensterbeziechnung). Sowas kann ja stören. Deshalb hier eine Variante, die sich wirklich immer in einem neuen Tab öffnet. (wie?: Fensterbezeichnung zufällig, wahrscheinlich zwar Kanonen-auf-Spatzen-mäßig, funktioniert aber)
    Allerdings gelang es mir diesmal nicht, dass hier in HTML darzustellen, warum auch immer. :? *grummel*.
    Daher hier nur die Bookmarklet Adresse:

    javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);var zfll='';var keylist="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789";zfll='';for(i=0;i<8;i++){zfll+=keylist.charAt(Math.floor(Math.random()*keylist.length))};if(!s)s=prompt('Bitte Adresse eingeben:','');if(s)window.open('http://www.berlin.de/stadtplan/map.…&size=3x3',zfll);})())

    Einfach rechts auf das bisherige Bookmarklet klicken, 'Eigenschaften' wählen und dann obigen Code bei 'Adresse' eingeben.

    Testadresse: z.B.: Brunnenstr. 183

  • Zitat von Bazon Bloch

    update:
    Die Bookmarklets über stadtplandienst.de funktionieren nicht mehr. Ich vermute, dass die URL, die ich verwendete, nur temporär ist, wahrscheinlich zur Vermeidung von Deep-Links.

    <a href="javascript:void((function(){var s='';(function(w){for(var i=0;i<w.length;i++){arguments.callee(w.frames[i]);}try{s+=w.document.selection.createRange().text;}catch(e){try{s+=w.document.getSelection();}catch(e){alert('Bookmarklet failed:\n\n'+e.message);}}})(top);if(!s)s=prompt('Bitte Adresse eingeben:','');if(s)location='http://www.berlin.de/stadtplan/map.…e(s)+'&size=3x3';})())" title="Adresse markieren und Bookmarklet klicken">Stadtplan Berlin</a>

    Ich bleib bei diesem Bookmarklet.
    Das öffnet die Seite im aktiven Tab.
    Die anderen erzeugen die Seite in einem neuen Fenster.

  • Zitat von Nemoflow

    Die anderen erzeugen die Seite in einem neuen Fenster.

    :arrow: Ja, genau das wollt ich ja auch! :D
    D.h. genau genommen einen neuen Tab, aber ob neues Fenster oder neuer Tab ist mir wurscht, darum kümmert sich die Tabbrowser Extension ('öffne neue Fenster nur, wenn ich sie öffne' :arrow: sonst Tabs)

  • Hab wieder das alte Leiden:
    Markierung wird nicht erkannt.
    Bookmarklet arbeitet ansonsten einwandfrei.
    Muß halt nur immer mit Copy und Paste arbeiten.
    JavaScript aktiviert etc etc, KEINE TBE installiert.

    Jemand eine Idee?

    @Nemo: Klappts bei Dir? Menno, und Du hast soviel mehr Extensions installiert als ich :(

    Lieber einmal zuviel paranoid als einmal zu wenig!

  • Zitat von tombik

    Hab wieder das alte Leiden:
    Markierung wird nicht erkannt.
    Bookmarklet arbeitet ansonsten einwandfrei.
    Muß halt nur immer mit Copy und Paste arbeiten.
    JavaScript aktiviert etc etc, KEINE TBE installiert.

    Jemand eine Idee?

    @Nemo: Klappts bei Dir? Menno, und Du hast soviel mehr Extensions installiert als ich :(

    Vielleicht liegts daran das ich noch die 0.9.3 'er Version benutze.

  • Zitat von Nemoflow

    Vielleicht liegts daran das ich noch die 0.9.3 'er Version benutze.

    Also ich benutze PR1.0 (bzw. das M1 Build von Moox) und bei mir funktioniert's! Der Text muss allerdings auf der Seite selbst stehen, Eingabefelder sind ungeeignet. (Wer ein Eingabfeld braucht, bekommt es ja durch fehlende Markierung).

    Tipp für passendes favicon:
    Irgendeine Stadtplanseite bookmarken, diesen Bookmark aufrufen, schon müßte er mit einem favicon ausgestattet sein. Browser schließen und einen Blick in die bookmarks.html (mit einem Texteditor) werfen:
    In der Zeile des Stadtplan-Bookmarks sollte als Parameter in den A HREF Klammern hinter der eigentlichen Adresse ICON="data:image/x-icon;base64,AAABAAIAEBAAAAAAAAB..." stehen. (Ich könnte das, was da steht, auch hier direkt posten, bloß wäre die Seite dann ohne Übertreibung 2m breit. Ist glaube ich nicht so gut im Sinne der Forumshygiene...)
    Diesen Eintrag einfach an der gleichen Stelle in der Zeile des Bookmarklets einfügen -fertig!
    :)

  • Zuallererst herzlichen Dank an 'Bazon Bloch',
    ein schönes Teil hast du da zusammengebastelt; funktioniert tadellos.
    Allerdings mit Verzögerung, und damit zu 'Tombiks' Problem. Falls du
    die TabPrefs installiert hast, wie sind die Einstellungen bei "Internen Links"?
    "Im aktuellen Fenster" wäre richtig, dann funktioniert es ohne copy&paste.
    Dazu öffnete sich, bei mir zumindest, ein Tab und ein Fenster. Nu is allet wundabar.
    Einen schönen Abend noch,

    Gruß, Thomas

    Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.8.0.8pre) Gecko/20061005 Firefox/1.5.0.8pre (Firefox musume); Mozilla/5.0 (X11; U; Linux i686; de-DE; rv:1.8.0.8pre) Gecko/20061001 Firefox/1.5.0.8pre (Swiftfox)

  • Jetzt geht zwar das Bookmarklet, aber mein Surfverhalten wird dadurch beeinträchtigt beim Öffnen von Bookmarks z.B. - ist aber jetzt ein anderes Thema...
    Ob ich den Tag noch erlebe, daß sich alles so einstellen läßt, wie ich es will? ;)
    Sarkasmus an:
    Und: ich LIEBE eingegraute,angekreuzte Einstellungen in Optionsfenstern
    /Sarkasmus aus

    Tombik

    Lieber einmal zuviel paranoid als einmal zu wenig!

  • Ich hab noch ein paar Minimalbookmarklets gebastelt, an denen man den Unterschied zwischen öffnen im aktuellen Tab/Fenster, öffnen in einem einmalig neuem Tab/Fenster und öffnen in einem immer neuen Tab/Fenster gut erkennen kann (da sie sonst fast nichts anderes machen...):

    Funktion: Bei Textlinks wie mozilla.org diesen Text markieren, Bookmarklet betätigen und schon wird man auf diese Seite gebeamt (http:// wird automatisch hinzugefügt).

    Variante 1: in aktuellem Fenster/Tab:
    <a href="javascript:teilUrl = document.getSelection();{location.href = 'http://' + escape(teilUrl);}", title="URL markieren und Bookmarklet klicken">mark URL</a>

    Code
    javascript:teilUrl = document.getSelection();{location.href = 'http://' + escape(teilUrl);}

    Variante 2: in einmalig neuem, dann aber festen Fenster/Tab:
    <a href="javascript:teilUrl = document.getSelection();window.open('http://' + escape(teilUrl),'festerFensterName')", title="URL markieren und Bookmarklet klicken">mark URL</a>

    Code
    javascript:teilUrl = document.getSelection();window.open('http://' + escape(teilUrl),'festerFensterName')

    Variante 3: in neuem Fenster/Tab:
    <a href="javascript:teilUrl = document.getSelection();var zfll='';var keylist='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789';zfll='';for(i=0;i<7;i++){zfll+=keylist.charAt(Math.floor(Math.random()*keylist.length))};window.open('http://' + escape(teilUrl),zfll)", title="URL markieren und Bookmarklet klicken">mark URL</a>

    Code
    javascript:teilUrl = document.getSelection();var zfll='';var keylist='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789';zfll='';for(i=0;i<7;i++){zfll+=keylist.charAt(Math.floor(Math.random()*keylist.length))};window.open('http://' + escape(teilUrl),zfll)


    :cry: schon wieder funktioniert diese Variante nicht als HTML. Was mach ich da bloß falsch? (das 'eckige Klammer /a eckige Klammer zu' steht bei mir im Editor, wird oben aber nicht angezeigt.) Ich habe es extra so stehen gelassen, damit mir jemand vielleicht diese Frage beantworten kann... (...oder einfach mal richtig postet.)

    TestURL: z.B. mozilla.org

    Der Unterschied zwischen Variante 2 und 3 wir erst bei mehrmaliger Anwendung deutlich.
    Vielleicht sind diese Bookmarklets sogar nützlich, z.B. für jemanden wie mich, der einen zu langsamen Rechner hat um Linkification ohne Geschwindigkeitseinbußen permanent laufen zu lassen, bestimmt aber als Bausteine für andere Bookmarklet Bastler, die wie ich eigentlich keine Ahnung von JavaScript haben. empfehlen kann ich dazu übrigens noch http://de.selfhtml.org/javascript/index.htm.
    So, dann bastlt mal schön... :D

    _______________________
    edit 11.10.2004::

    Habe mittlerweile rausgefunden, dass das v i e l einfacher geht mit dem immer neum Fenster. Der Methode window.open kann man nämlich auch einen leeren Fensternamen übergeben, dann öffnet sich immer ein neues Fenster. Ohne das Zufallsgeneratorgedöns. Der Aufruf sieht also so aus: window.open(URL,'') mit URL='http://usw.'
    Außerdem meldete die JavaScript Konsole noch eine Warnung bei der methode document.getSelection. Stattdessen solle man lieber window.getSelection verwenden.
    Wird gemacht!
    Also: Die neue, einfache und saubere Variante des Stadtplan Bookmarklets ist:
    <a href="javascript:void((function(){aDReSSe = window.getSelection();if(aDReSSe==''){aDReSSe=prompt('Nichts markiert. Bitte Adresse eingeben:','');};if(aDReSSe){window.open('http://www.berlin.de/stadtplan/map.…SSe)+'&size=3x3','');}})())", title="Adresse markieren und Bookmarklet klicken">Stadtplan Berlin</a> Testadresse: nochmal z.B. Brunnenstr. 183

    Code
    javascript:void((function(){aDReSSe = window.getSelection();if(aDReSSe==''){aDReSSe=prompt('Nichts markiert. Bitte Adresse eingeben:','');};if(aDReSSe){window.open('http://www.berlin.de/stadtplan/map.asp?start.x=5&plz=&str='+escape(aDReSSe)+'&size=3x3','');}})())


    Nur so als Ergänzung und um nicht als der Idiot, der immer einen Zufallsgenerator bemühte um ein neues Fenster zu öffnen, in die Geschichte des JavaScripts eingeht. :wink:

  • Zitat von tombik

    Bei Text Links funzt aber wunderbar auch SuperDragAndGO ;)


    wow, genial! :D oder auch: cool 8)
    (Die zuletzt geposteten Bookmarklets sollten ja auch hauptsächlich demonstrieren, wie man deren Quelltext anlegen kann, damit sie im aktuellen oder eben einem neuen Fenster geöffnet werden, Funktion war weniger wichtig...)