Probleme mit URI Übergabe

  • Grüß euch Kameraden!

    Lese hier schon lange mit und habe mir schon einige super Tipps bzgl. userchrome etc. geholt.

    Nun wollte ich ein schon lange bestehendes Problem lösen und dazu ein kleines Addon machen.

    das problem ist folgendes: da ich meine Lesezeichen gerne zentral habe speichere ich sie bei Google Bookmarks. Dazu musste ich aber immer auf die Seite gehen und dort alles per Hand eingeben.

    deshalb das addon das das automatisch erledigen sollte. aber irgendwie schaffe ich es nicht dass die URL und der Titel der Seite übergeben werden.

    Code
    onMenuItemCommand: function(e) {                               
           if (gContextMenu.onLink) {
    		var l = gContextMenu.getLinkURL();
    		var r = encodeURI;
    			gBrowser.addTab("http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk="+r(l.location)+"&title="+r(l.title));                     
    			}
          },

    die Variable l sollte den URI auslesen und r sollte den URI dekodieren.

    es wird zwar ein neuer Tab geöffnet, aber anstatt des URI wird "http://undefinded" bei der URL und "undefined" beim Titel eingegeben..

    warum ist mir aber ein Rätsel. Bitte euch um Hilfe!

    Danke

  • gContextMenu.getLinkURL() liefert dir den URL, das ist ein String in dem Fall, kein Objekt. Daher sind .location und .title undefined. Siehst du wenn, du typeof l prüfst.
    Die Zuweisung von encodeURI kannst du dir auch sparen und den Funktionsnamen direkt verwenden. Die Variable ist unnötig und durch die Zuweisung sparst du dir auch keine Zeichen.
    Btw. mit dem Title wird es so auch nicht klappen. Dazu müsste die Erweiterung erst das Dokument downloaden und dann den Title aus den Tags parsen.

  • aha! war wohl zu umständlich gedacht...

    also verbessert:

    Code
    onMenuItemCommand: function(e) {                               
           if (gContextMenu.onLink) {
    		var l = gContextMenu.getLinkURL();
    		gBrowser.addTab("http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk="+encodeURI(l)+"&title="+(l.title));                     
    			}
          },

    Das mit dem Titel ist aber sch**** :( gibts da keine andere Möglichkeit den auszulesen?

    Wärs möglich die Bezeichnung des Links zu verwenden?

    Also wenn z.B.

    Code
    <a href="www.test.de">Stiftung Warentest</a>

    dann ist der Titel "Stiftung Warentest"

    Wie müsste ich das ansetzen wenn ich nach dem Schema vorgehe?

    Danke

  • hannstheiron wrote:

    Zitat

    gibts da keine andere Möglichkeit den auszulesen?


    Doch, du kannst mit einem XMLHTTPRequest das Zieldokument abrufen und wie angegeben den Titel parsen. Ist weder schwer noch umfangreich. Erfordert eben nur einen weiteren Request. Vor kurzem gab es ein ähnlich gelagertes Problem.
    Daraus: http://pastebin.com/f3d87cd5d
    Schau dir mal die Funktion getToken an, die kannst du entsprechend adaptieren.

    Zitat

    Wärs möglich die Bezeichnung des Links zu verwenden?

    Ja, auch das ginge.

    Zitat

    Wie müsste ich das ansetzen wenn ich nach dem Schema vorgehe?

    Über das target-Attribut des gContextMenu.

  • habs mit target probiert (genauer mit gContextMenu.target.href) aber der gibt ja nur den URL zurück... konnte nichts finde wie ich den Titel bekomme. Wo kann ich da nachschlagen?

  • Nochmal: den Title bekommst du nur über den Download (bspw. XMLHTTPRequest) und sicher nicht mit einem Zugriff auf irgendein "href". Deine Alternative war die Ausgabe des Text-Nodes innerhalb des Links. Dazu kannst du auch einfach gContextMenu.linkText() nutzen (ist zielführender).

    http://mxr.mozilla.org/firefox/source…sContextMenu.js
    Zum Nachlesen.

  • ich hab mir jetzt mal gedanken gemacht und bin drauf gekommen, dass man ja nicht nur links die irgendwo in textform stehen speichern will, sondern auch links die man bereits aufgerufen hat.

    Wenn ich als auf einer offenen Seite rechtsklicke, dann kommt ja der Standardeintrag "Lesezeichen für diese Seite hinzufügen" ...

    wie kann ich das für mein Addon realisieren?
    also einerseits: wie kann ich die url und den titel der seite auslesen?
    und andererseits: wie kann ich unterscheiden ob ich auf einen link klicke oder irgendwohin auf eine seite?

    bin dankbar für hinweise

    :D

  • also ich habe im dom inspector den eintrag gesucht.

    Code
    gContextMenu.bookmarkThisPage();

    aber den showItem Call, mit dem ich sehen kann was dort abläuft überseh ich wohl... wo ist der?

    ich brauche mir dann eigentlich nur anschauen was dort passiert, und dass in mein addon übernehmen (als eigenen eintrag der dann per gBrowser.selectedBrowser.contentDocument auf Title und URL zugreift).. liege ich da soweit gedanklich richtig?

  • Wie ich oben schon schrieb, einfach eine zweite Erweiterung des Kontextmenüs hinzufügen und in der onMenuItemCommand dann eben auf den Seitentitel und den URL zugreifen (über das genannte Objekt). Diese Daten können dann an Google Bookmarks geschickt werden.

  • klaudschv hilft mir nur ein wenig mit den Icons im Kontextmenü usw.

    also ich hab das jetzt mal umgebaut:

    der Teil mit gContextMenu.onLink funktioniert (sowohl tab öffnen als auch übergabe) der Teil mit gContextMenu.isContentSelected aber funktioniert nicht (da öffnet sich schon kein tab)

    wo liegt der hund?

  • Also soll es ein Menüpunkt bleiben?

    Code
    else (gContextMenu.isContentSelected) {


    Ist falsche Syntax. Lies dich mal in Kontrollstrukturen bei JavaScript ein. An das else werden keine Bedingungen mehr geknüpft. Es reicht schlicht else {.
    Zudem sind location und title keine Funktionen, sondern Eigenschaften. Bei Location handelt es sich zudem um ein Objekt, daher greift man besser auf die Eigenschaft href zu.

  • Zitat

    Also soll es ein Menüpunkt bleiben?

    meinst du mit "ein" Menüpunkt, dass es nur einen Eintrag gibt und der je nachdem was angeklickt wird anders reagiert?

    oder meinst du dass es 2 Einträge geben sollte? oder wie kann ich das verstehen?

    edit: isContentSelected ist offenbar auch falsch. Das bezieht sich nur auf markierte Sachen. Was ist dann der richtige Ausdruck für "leerer Platz auf Website"?? :)

    edit2: ich hab hier https://developer.mozilla.org/En/XUL/PopupGuide/Extensions ganz unten die properties für gContextMenu gefunden, da ist aber das was ich suche (-> Ausdruck für "leerer Platz auf Website") nicht dabei. so what?