Beiträge von milupo
-
-
Schön, dass du es selbst herausfinden konntest.

-
-
Ja, ich habe gesehen, dass parentNode nicht definiert ist, aber, da es eben in der Version #1 ebenfalls nicht definiert ist, habe ich mir nichts weiter dabei gedacht und einen Bezugsfehler auf irgendeinen anderen Code-Teil angenommen.
lenny2 Wo hast du das Skript her?
-
Meine Version ist diese:
JavaScript
Alles anzeigen// export_folder_to_html.uc.js // Exports folder bookmarks to HTML file // Item "Export folder to HTML" in the context menu of the folder in “Manage Bookmarks” and Sidebar (async topic => { let imp = (m, n = m) => ChromeUtils.importESModule(`resource://gre/modules/${m}.sys.mjs`, {})[n]; var exporter = { get dps() { delete this.dps; return this.dps = imp("DownloadPaths"); }, get exporter() { delete this.exporter; return this.exporter = imp("BookmarkHTMLUtils", "BookmarkExporter"); }, async export(popup) { var win = popup.ownerGlobal, tn = popup.triggerNode; var node, pu = win.PlacesUtils, bm = pu.bookmarks; if (tn.nodeName == "treechildren") node = popup._view.selectedNode; else if (tn.id == "OtherBookmarks") node = {bookmarkGuid: bm.unfiledGuid, title: tn.getAttribute("label")}; else node = tn._placesNode || popup._view.result.root; var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); fp.init(win, win.PlacesUIUtils.promptLocalization.formatValueSync("places-bookmarks-export"), fp.modeSave); fp.appendFilters(fp.filterHTML); fp.defaultString = (node.title ? this.dps.sanitize(node.title) : "untitled") + ".html"; if (await new Promise(fp.open) == fp.returnCancel) return; var tree = await pu.promiseBookmarksTree(pu.getConcreteItemGuid(node), {includeItemIds: true}); tree.title = bm.getLocalizedTitle(tree); var bookmarks = {children: [ {root: "toolbarFolder"}, {root: "unfiledBookmarksFolder"}, {root: "bookmarksMenuFolder", children: [tree], guid: bm.menuGuid} ]}; new this.exporter(bookmarks).exportToFile(fp.file.path); }, observe(doc) { var popup = doc.querySelector("menupopup#placesContext"); if (!popup) return; var menuitem = (doc.createXULElement || doc.createElement).call(doc, "menuitem"); for(var args of Object.entries({ label: "Export folder to HTML", selection: "folder", "node-type": "folder", "selection-type": "single|none", id: "placesContext_exportFolder" })) menuitem.setAttribute(...args); menuitem.exporter = this; menuitem.addEventListener('click', () => { exporter.export(parentNode); }); doc.getElementById("placesContext_openSeparator").before(menuitem); } }; Services.obs.addObserver(exporter, topic); Services.obs.addObserver(function quit(s, t) { Services.obs.removeObserver(quit, t); Services.obs.removeObserver(exporter, topic); }, "quit-application-granted"); })("chrome-document-loaded");In Zeile 51 habe ich erst einmal parentNode belassen. Die Konsole sagt mir aber, dass parentNode nicht definiert ist.

-
Hallo Endor Auch von mir alles Gute zu deinem Geburtstag und für die Zukunft.
-
Das Dialogfenster von Windows zum Speichern der HTML-Datei kann ich irgendwie nicht aufrufen.
Ich komme auch nicht weiter. Ob da überhaupt ein Speichern-Dialog kommt, weiß ich nicht. Ich habe lenny2 in Beitrag #7 schon Fragen gestellt, aber er hat bisher nicht geantwortet.
-
-
Hast du Beitrag #2 eingearbeitet? Erst dann erscheint wieder der Eintrag. Aber leider bisher eben nur das.
Hier das komplette Skript mit den Änderungen:
JavaScript
Alles anzeigen// export_folder_to_html.uc.js // Exports folder bookmarks to HTML file // Item "Export folder to HTML" in the context menu of the folder in “Manage Bookmarks” and Sidebar (async topic => { var imp = (m, n = m) => ChromeUtils.importESModule("resource://gre/modules/${m}.sys.mjs", {})[n]; var exporter = { get dps() { delete this.dps; return this.dps = imp("DownloadPaths"); }, get exporter() { delete this.exporter; return this.exporter = imp("BookmarkHTMLUtils", "BookmarkExporter"); }, async export(popup) { var win = popup.ownerGlobal, tn = popup.triggerNode; var node, pu = win.PlacesUtils, bm = pu.bookmarks; if (tn.nodeName == "treechildren") node = popup._view.selectedNode; else if (tn.id == "OtherBookmarks") node = {bookmarkGuid: bm.unfiledGuid, title: tn.getAttribute("label")}; else node = tn._placesNode || popup._view.result.root; var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); fp.init(win, win.PlacesUIUtils.promptLocalization.formatValueSync("places-bookmarks-export"), fp.modeSave); fp.appendFilters(fp.filterHTML); fp.defaultString = (node.title ? this.dps.sanitize(node.title) : "untitled") + ".html"; if (await new Promise(fp.open) == fp.returnCancel) return; var tree = await pu.promiseBookmarksTree(pu.getConcreteItemGuid(node), {includeItemIds: true}); tree.title = bm.getLocalizedTitle(tree); var bookmarks = {children: [ {root: "toolbarFolder"}, {root: "unfiledBookmarksFolder"}, {root: "bookmarksMenuFolder", children: [tree], guid: bm.menuGuid} ]}; new this.exporter(bookmarks).exportToFile(fp.file.path); }, observe(doc) { var popup = doc.querySelector("menupopup#placesContext"); if (!popup) return; var menuitem = (doc.createXULElement || doc.createElement).call(doc, "menuitem"); for(var args of Object.entries({ label: "Export folder to HTML", selection: "folder", "node-type": "folder", "selection-type": "single|none", id: "placesContext_exportFolder" })) menuitem.setAttribute(...args); menuitem.exporter = this; menuitem.addEventListener('click', () => { this.export(parentNode); }); doc.getElementById("placesContext_openSeparator").before(menuitem); } }; Services.obs.addObserver(exporter, topic); Services.obs.addObserver(function quit(s, t) { Services.obs.removeObserver(quit, t); Services.obs.removeObserver(exporter, topic); }, "quit-application-granted"); })("chrome-document-loaded");Hier noch ein Bildschirmfoto. Ist in Sorbisch, aber ich habe dort auf den Lesezeichen-Ordner Firefox-Hilfe in der Lesezeichen-Symbolleiste mit der rechten Maustaste geklickt.
-
Ich habe mal das Changeset aus dem Bildschirmfoto aufgerufen. Vielleicht hilft es:
-
In welchem Kontextmenü sollte welcher Eintrag erscheinen?
Steht in Zeile 3. In den Lesezeichen der Sidebar und in denen der Bibliothek (Lesezeichen --> Lesezeichen verwalten). Dort auf einen Lesezeichen-Ordner mit der rechten Maustaste klicken, dann auf den Eintrag Export folder to HTML und dann werden die entsprechenden Lesezeichen als HTML-Datei gespeichert. Leider funktioniert das nicht mehr.
-
Hast du was Besseres?
Ich habe meine Meinung geschrieben. Es geht hier nicht um besser oder nicht besser. Es geht einfach um Übersichtlichkeit und Handhabbarkeit für den Nutzer. Wenn es ein Problem mit dem zugehörigen CSS gibt, muss man nicht erst ein Skript durchsuchen, sondern die entsprechende CSS-Datei. Außerdem ist zusätzlicher Code immer eine Fehlerquelle, zumal das kein JavaScript-Code ist. Nun gut, ich habe mich nicht strikt gegen CSS in JavaScript ausgesprochen, aber einem Nutzer, der sich mit Skripten und kaum mit CSS auskennt zu sagen, er solle das CSS einfach in das Skript übernehmen, ist die Übernahme für dich einfach, aber nicht für den Nutzer.
-
Welchen Nachteil könnte das denn dann haben?
Wie gesagt, ich halte es für unübersichtlicher. Was ist, wenn das Skript nicht mehr funktioniert, du musst dann auch den CSS-Code durchgehen. Und für jemanden, der von Skripten keine Ahnung hat, ist das nicht einfacher, das einzubauen. Der kann dann wieder nur komplette Skripts übernehmen.
Und ich könnte mir auch vorstellen, dass das Skript dann langsamer geladen wird.
-
-
-
Habe erst einaml ein Downgrade gemacht.
Keine gute Idee. Aus Sicherheitsgründen. Es ist doch nicht so, dass du ab Fx 135 auf die Menüleiste verzichten müsstest.
Ich habe diesen Hilfeartikel gefunden:
Wiederherstellen der ausgeblendeten Firefox-Menüleiste | Hilfe zu Firefox
Demnach könnte es sein, dass du dich im Problemfalle im Vollbildmodus befindest oder Firefox nicht die ausgewählte Anwendung ist (was auch immer das heißt, ich bin Windows-Nutzer).
-
-
-
Verwendest du irgendein externes Antivirenprogramm wie AVG oder ESET? Die können das auch verursachen.
-