JavaScript & Pfadangaben

  • Firefox-Version
    126.0 (64Bit)
    Betriebssystem
    Windows 10 Version 22H2 (Build 19045.4412)

    Ich habe in einem Skript das Problem, dass die Grafik einfach nicht angezeigt wird,
    wenn ich Variablen benutzen möchte.

    Folgendes habe ich alles schon ausprobiert:

    Jemand eine Idee, wie es korrekt lauten müsste?

    Mit <3lichem Gruß

    Mira

  • Sören Hentzschel Sorry, aber ich stehe oder sitze auf'em Schlauch.


    Wenn ich folgendes im Code verwende, bekomme ich die Grafik angezeigt.

    JavaScript
    let iconPath = "file:///C:/Users/Mira/AppData/Roaming/Mozilla/Firefox/Profiles/Andreas/chrome/icons/";
    let ButtonIcon = "DeepL_2.png";
    menuitem.style.listStyleImage = 'url("' + iconPath + ButtonIcon + '")';

    Ich möchte nun aber den Pfad ins Verzeichnis "berechnen".
    Entweder sollte es so Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/") gehen,
    wobei /chrome/icons/ noch irgendwie da rein gewurschtelt werden muss.

    Oder einfach nur PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'))

    Jedoch funktioniert keines von beiden und das NUR in diesem einem Skript!

    Beide Varianten habe ich in verschiedenen Skripten in der Anwendung,

    jedoch nie mit menuitem.style.listStyleImage.


    Ich hänge mal das ganze Skript an.

    Mit <3lichem Gruß

    Mira

    Einmal editiert, zuletzt von Mira_Belle (16. Mai 2024 um 21:45)

  • Sören Hentzschel So ganz generell!
    Welche Konsole! Eingabeaufforderung, PowerShell?
    Oder irgendwas in den Browserwerkzeugen?

    Habe aber den obigen Beitrag ergänzt.


    AH! Habs geschnackelt!

    Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/")
    Ergibt: "C:/Users/Mira/AppData/Roaming/Mozilla/Firefox/Profiles/Mira"

    Ergebniss ist soweit richtig!

    PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'))
    Ergibt:
    "file:///C:/Users/Mira/AppData/Roaming/Mozilla/Firefox/Profiles/Mira/chrome/icons"

    Auch dieses Ergebniss wäre soweit richtig!

    Somit müssten doch beide Varianten normalerweise funktionieren!

    Variante 1:

    JavaScript
      let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
      let ButtonIcon = "DeepL_2.png";
      menuitem.style.listStyleImage = 'url("' + ProfilePath + ButtonIcon +'")';

    Variante2:

    JavaScript
    let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
    let ButtonIcon = "DeepL_2.png";
    menuitem.style.listStyleImage = 'url("' + ProfilePath + "/chrome/icons/" + ButtonIcon + '")';

    Mit <3lichem Gruß

    Mira

    Einmal editiert, zuletzt von Mira_Belle (16. Mai 2024 um 22:01)

  • Dies funzt bei mir (nur ein Beispiel), vieleicht bringt Dich das weiter.:

    Ich mach mir die Welt, wie sie mir gefällt. [Pippi Langstrumpf/Astrid Lindgren]

  • Ich fress 'en Besen.

    Vielen lieben Dank Mitleser

    JavaScript
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
        let ButtonPath = '/chrome/icons/';
        let ButtonIcon = "DeepL_2.png";
    
        menuitem.style = "list-style-image: url('" + ProfilePath + ButtonPath + ButtonIcon + "');";

    Das ist die Lösung!

    Mit <3lichem Gruß

    Mira

  • Habe noch etwas herumexperimentiert!
    menuitem.style = 'list-style-image: url("' + ProfilePath + ButtonPath + ButtonIcon + '")';
    Funktioniert.

    Und menuitem.style.listStyleImage = 'url("' + ProfilePath + ButtonPath + ButtonIcon + '")';
    funktioniert auch.

    Und der ganze Ärger nur, weil für /chrome/icons/ auch noch eine Variable erstellt werden musste.
    bzw. weil let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
    so und nur in diesem Skript, warum auch immer, einfach nicht will.
    Wenn mir DAS mal einer erklären könnte.

    Mit <3lichem Gruß

    Mira

  • Und der ganze Ärger nur, weil für /chrome/icons/ auch noch eine Variable erstellt werden musste.
    bzw. weil let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
    so und nur in diesem Skript, warum auch immer, einfach nicht will.
    Wenn mir DAS mal einer erklären könnte.

    Klar funktioniert das. Du hast nur, wie ich es schon zwei Mal schrieb, ein / vor dem Dateinamen vergessen. Nutze doch, wie empfohlen, die Konsole und teste dort die Pfade. Dann siehst du sofort den Unterschied:

    JavaScript
    var ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
    var ButtonPath = '/chrome/icons/';
    var ButtonIcon = "DeepL_2.png";
    ProfilePath + ButtonPath + ButtonIcon

    => "file:///<profilordner>/chrome/icons/DeepL_2.png"

    JavaScript
    var ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
    var ButtonIcon = "DeepL_2.png";
    ProfilePath + ButtonIcon

    => "file:///<profilordner>/chrome/iconsDeepL_2.png"

    Schau direkt vor dem DeepL_2.png. Ist ja auch logisch, wenn du dir beide Codes ansiehst. Im oberen Beispiel setzt du über die zweite Variable noch ein / zwischen Pfad und Dateiname, im unteren Beispiel nicht, da folgt der Dateiname direkt auf den PathUtils-Aufruf.

    (Ich habe die let an der Stelle nur gegen var ausgetauscht, weil sich dann leichter damit in der Konsole experimentieren lässt. Einmal definiert, dürfte man es nicht nochmal neu mit gleichem Namen definieren. Im realen Script würde ich nur let oder const verwenden.)

  • Sören Hentzschel Das mit dem "vergessenem" / habe ich nun, nach etlichen "Zaunlatten" begriffen.

    Nur warum es partout nicht mit

    JavaScript
    let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
    let ButtonIcon = "DeepL_2.png";
    menuitem.style.listStyleImage = 'url("' + ProfilePath + "/chrome/icons/" + ButtonIcon + '")';

    will, will mir nicht in den Kopf rein.
    Denn in der Konsole ergibt

    Code
    var ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
    var ButtonIcon = "DeepL_2.png";
    ProfilePath + "/chrome/icons/" + ButtonIcon
    "C:/Users/Mira/AppData/Roaming/Mozilla/Firefox/Profiles/Mira/chrome/icons/DeepL_2.png" 

    Und das wäre ja eigentlich richtig. :/

    Mit <3lichem Gruß

    Mira

  • Nun habe ich es, so hoffe ich, kapiert.
    Ich habe jetzt mehrere Möglichkeiten, den Pfad "berechnen" zu lassen.

    Version 1

    JavaScript
    	let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)); // Pfad zum Profilordner
    	let ButtonPath = "/chrome/icons/"; // Pfad in den entsprechenden Unterordner
    	let ButtonIcon = "DeepL_2.png"; // Name & Dateiendung des anzuzeigenden Symbols!
    	menuitem.style = 'list-style-image: url("' + ProfilePath + ButtonPath + ButtonIcon + '")';

    Version 2

    JavaScript
    	menuitem.style.listStyleImage = 'url("' + ProfilePath + ButtonPath + ButtonIcon + '")';

    Version 3

    JavaScript
    	let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'))
    	let ButtonIcon = "DeepL_2.png";
    	menuitem.style.listStyleImage = 'url("' + ProfilePath + "/" + ButtonIcon + '")';

    Und die "schönste" wie ich finde,
    Version 4

    JavaScript
    	let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
    	let ButtonIcon = "DeepL_2.png";
    	menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + ButtonIcon) + '")';

    Alle Möglichkeiten habe ich für zukünftige "Projekte" ausgeklammert und kommentiert,
    mal in dem Skript stehen lassen, weil ich mich kenne und mir sicher bin,
    dass ich das alles wieder vergessen werde.

    Hoffentlich erinnere ich mir dann aber an diese "Vorlagen". :D

    Und, Danke. Sören Hentzschel & Mitleser

    Mit <3lichem Gruß

    Mira