2012-03-27 14 views
-1

Ich versuche, den Inhalt von allen Knoten im Lesezeichenmenü in textbox.value zu bekommen, aber nur das letzte Lesezeichen erscheint. Was mache ich falsch?GetAllBookmarks in Firefox

function AllBookmarks() 
{ 
    var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"] 
            .getService(Components.interfaces.nsINavHistoryService); 
    var options = historyService.getNewQueryOptions(); 
    var query = historyService.getNewQuery(); 
    var bookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"] 
            .getService(Components.interfaces.nsINavBookmarksService); 
    //var toolbarFolder = bookmarksService.toolbarFolder; 
    //var bookmarksMenuFolder = bookmarksService.bookmarksMenuFolder; 
    var unfiledBookmarksFolder = bookmarksService.unfiledBookmarksFolder; 

    //query.setFolders([toolbarFolder], 1); 
    //query.setFolders([bookmarksMenuFolder], 1); 
    query.setFolders([unfiledBookmarksFolder], 1); 

    var result = historyService.executeQuery(query, options); 
    var rootNode = result.root; 
    rootNode.containerOpen = true; 

    // iterate over the immediate children of this folder 
    for (var i = 0; i < rootNode.childCount; i ++) { 
     var node = rootNode.getChild(i); 
    } 

    // close a container after using it! 
    rootNode.containerOpen = false; 
    var textbox = document.getElementById("MyExtension"); 
    var title= "Title: " + node.title; // shows the title of URL 
    var url= "\nURL: " + node.uri; // shows the URL 
    textbox.value = title + url + "\n"; 
} 
+1

Haben Sie diesen Code durchgearbeitet und handgeschrieben? Bitte geben Sie den ursprünglichen Code ein, wählen Sie ihn aus und drücken Sie die Taste '{}' in der Symbolleiste, um ihn als Code zu formatieren. – Bojangles

+1

Was ist das Problem? – epascarello

+0

Das Problem ist, dass dieser Code mir nur die letzte URL aus den Lesezeichen gibt. – user1296544

Antwort

0

In der Schleife als „über die unmittelbaren Kinder dieses Ordners iterieren“ kommentiert, sind Sie wahrscheinlich richtig über jeden der Lesezeichen Looping, aber Sie werden mit dem jedem Knoten nicht zum nächsten, bevor sie etwas zu tun . Daher wird die Variable node beim Verlassen der Schleife auf den letzten Knoten gesetzt.

Auch Sie sind Zuordnung, um es zu textbox.value, anstatt anhängt, so dass selbst wenn Sie waren auf die Daten wirken für jeden Knoten Sie es jedes Mal verprügelt hätte, in resultierenden nur die Daten des letzten Knotens (das gleiche Ergebnis!). Wenn Sie einen String wie diesen aufbauen wollen, müssen Sie an ihn anhängen, ihm nicht zuweisen. Eine Möglichkeit, dies zu tun, ist mit dem Operator +=.

der letzte Teil des Codes sollte also wie etwas sein:

var textbox = document.getElementById("MyExtension"); 

// iterate over the immediate children of this folder 
for (var i = 0; i < rootNode.childCount; i ++) { 
    var node = rootNode.getChild(i); 
    var title = "Title: " + node.title; // gets the title of URL 
    var url = "\nURL: " + node.uri; // gets the URL 
    textbox.value += title + ": " + url + "\n"; // note the += (append) operator 
} 
// close a container after using it! 
rootNode.containerOpen = false; 

NB: In vielen anderen (strengeren) Sprachen, geposteten Code würde nicht kompilieren, weil Sie die Variable node außen mit sind der "Geltungsbereich" (die Klammern), in dem es erklärt wurde. Es ist eine gute Faustregel, freiwillig zu folgen: Ein Verstoß gegen diese Richtlinie bedeutet oft, dass Sie einen Fehler machen oder genauer darüber nachdenken, was Sie tun. In diesem Fall hat es Sie möglicherweise auf das Problem aufmerksam gemacht.

+0

Gr8 aaaidan thx für Hilfe funktioniert jetzt aber nur aus dem Ordner unfiledBookmarksFolder .... jetzt, wie ich die anderen Ordner verbinden kann, um sie alle zusammen zu drucken. Wie Sie sehen, habe ich den Service für toolbarFolder und bookmarksMenuFolder kommentiert, aber es gibt mir keine URLs und Titel..thx Zu allen Entschuldigung für meine schlechte Info über mein Problem, aber ich bin hier zum ersten Mal und mein Englisch ist nicht so gut wie deins ..thx alles für Kommentare – user1296544

+0

Danke an alle guten Leute :) Problem gelöst mit allen Lesezeichen :))) – user1296544

+0

Keine Probleme user1296544. Großartiges Englisch ist hier keine Voraussetzung, nur darauf achten, die Situation genau zu beschreiben. Eine sorgfältig geschriebene Frage wird viel mehr helfen! Drei grundlegende Dinge, die man einbeziehen sollte: Sagen Sie, was Sie getan haben (normalerweise der Code), was Sie erwartet haben und was tatsächlich passiert ist. – aaaidan