T-Rex: Textfile via Browsern im Editor öffnen

Moin,

ich würde gerne eine Datei so im HTML verlinken, dass es in meinem Standard Texteditor aufgeht - also ein Programm außerhalb des Browsers. Es geht darum, dass ich die Datei auch bearbeiten kann.

Aktuell Verlinke ich es so: <a href='file:///C:\xampp\htdocs\test\test.txt'>Öffne!</a> und bekomme diese Meldung: "Not allowed to load local resource"

Die komplette Welt in der sich dieses Szenario abspielt ist lokal. Das System soll auf mich bzw. meinen Computer abgestimmt werden. Deshalb kann ich einstellen was ich will.

Benutzt wird aktueller Chrome. Aktuellstes Xampp. Windows 10. Bei der Datei geht es um eine php Datei - ich hoffe das verkompliziert die Sache nicht.

Mir ist bewusst, dass ich eine ähnliche Frage schon vor kurzer Zeit gestellt habe. Damals konnte ich die Anforderung umgehen. Diesmal ist es wohl nicht möglich, weshalb ich eine Lösung brauche.

Gruß aktueller T-Rex

  1. Moin T-Rex,

    Aktuell Verlinke ich es so: <a href='file:///C:\xampp\htdocs\test\test.txt'>Öffne!</a> und bekomme diese Meldung: "Not allowed to load local resource"

    Die komplette Welt in der sich dieses Szenario abspielt ist lokal. Das System soll auf mich bzw. meinen Computer abgestimmt werden. Deshalb kann ich einstellen was ich will.

    Benutzt wird aktueller Chrome. Aktuellstes Xampp. Windows 10. Bei der Datei geht es um eine php Datei - ich hoffe das verkompliziert die Sache nicht.

    Ich schließe daraus, dass der file-Link in einer Seite auftaucht, die per HTTP(S) ausgeliefert wird. Das wird meines Wissens so einfach nichts:

    • Das Sicherheitsmodell der Browser lässt aus dem HTTP-Kontext keinen lokalen Zugriff zu.
    • Wenn du die Datei doch per HTTP auslieferst, wird sie noch einmal heruntergeladen.
    • Wenn die Datei mit einem text Content-Type ausgeliefert wird, ist die Chance hoch, dass der Browser die Datei anzeigt.

    Mir ist bewusst, dass ich eine ähnliche Frage schon vor kurzer Zeit gestellt habe. Damals konnte ich die Anforderung umgehen. Diesmal ist es wohl nicht möglich, weshalb ich eine Lösung brauche.

    Einzige Lösung, die mir hierzu einfällt, ist ein eigenes Protokoll zu konfigurieren und den Text-Editor als Protokoll-Handler zu verwenden, d.h. so etwas wie

    <a href="trex:C:\xampp\htdocs\test\test.txt">Öffne!</a>
    

    Der Texteditor muss damit natürlich etwas anfangen können, ansonsten musst du selbst noch einen Protokoll-Handler schreiben, der den Pfad für den Texteditor aufbereitet.

    Viele Grüße
    Robert

    1. Klingt gut, auch wenn es doof klingt 😀

      Ich öffne die Seiten via Standard Apache localhost Aufruf. https habe ich lokal natürlich nicht an - wozu auch, ich will mir ja nicht selbst die Daten stehlen 😉.

      Wie schreibe ich so ein Protokoll-handler?

      Gruß Protokoll-handler eures Vertrauens trex

      1. Klingt gut, auch wenn es doof klingt 😀

        Ich öffne die Seiten via Standard Apache localhost Aufruf. https habe ich lokal natürlich nicht an - wozu auch, ich will mir ja nicht selbst die Daten stehlen 😉.

        Die Frage ist auch, warum da ein HTTP-Server laufen muss?

        Wie schreibe ich so ein Protokoll-handler?

        Soweit ich das sehe, ist ein Protokoll-Handler ein Programm, das den kompletten URI als Kommandozeilen-Parameter übergeben bekommt. Für http ist das Programm dein Standard-Browser und die URI kommt als Parameter, z.B.

        "C:\Program Files\Mozilla\Firefox\firefox.exe" http://localhost/pfad
        

        Wenn du also dein eigenes Protokoll trex definierst (weil der Texteditor kein eigenes hat), dann brauchst du ein Programm, dass einen URI der Art

        trex:C:\xampp\htdocs\test\test.txt
        

        entgegennimmt, das trex-Protokoll entfernt und den Dateinamen als Parameter deinem Texteditor übergibt.

        Die Definition der Protokoll-Handler findest du in der Windows-Registry unter HKEY_CLASSES_ROOT.

        Viele Grüße
        Robert

        1. Hallo Robert-rex,

          Das Zeug ist hier dokumentiert.

          Konkret geht das so:

          • REGEDIT öffnen
          • In HKEY_CLASSES_ROOT einen neuen Schlüssel namens trex einrichten
          • Unter trex einen Key shell anlegen, darin einen Key open, darin einen Key command
          • Darin unter (Standard) einen Namen für's Protokoll vergeben (beliebig)
          • Einen Zeichenfolge-Wert (REG_SZ) mit Namen URL Protocol anlegen, Inhalt leer

          • bei shell unter (Standard) den Wert open eintragen

          • bei command unter (Standard) die auszuführende Befehlszeile eintragen

          Und jetzt kommt etwas Arbeit, denn der dort angegebene Befehl bekommt die URL 1:1 und url-codiert aus dem Browser übergeben. Steht da also z.B. trex:D:/files/datei.txt, dann kommt das genau so an. Inclusive der Anführungszeichen.

          Etwas schlimmer: Steht da "trex:D:\files\datei.txt, sind die Backslashes als %5C codiert. Gegenmaßnahme: Vom Server immer die Vorwärtsschrägstriche schicken, die meisten Programme kommen damit klar. Wenn nicht, muss man das %5C im Treiberscript wieder nach \ zurückübersetzen.

          Das Treiberscript muss darüber hinaus das trex: Präfix entfernen. Das ist in Windows NT Batches relativ simpel. Mein Notepad++ Treiber sieht so aus:

          @echo off
          set name=%1
          C:\t.nt\notepad++\notepad++.exe "%name:~6%
          

          C:\t.nt ist aus Gründen, deren Historie in die 80er zurückreicht, mein Ordner für diverse Tools. Damals war ein PATH auf 250 Stellen begrenzt, mein PATH war übervoll, meine Toolscripte lagen darum in C:\T. Irgendwann kam WinNT, und der Ordner hieß dann C:\T.NT. Dabei ist es geblieben, dieser Ordner hat bisher jeden Computerumzug treu mitgemacht 😂.

          Was tut das Script?

          Zeile 1: Standardmantra für jedes produktive Windows Script Zeile 2: Parameter 1 in eine Umgebungsvariable übertragen. Muss sein, weil der :~ Operator für %1 nicht funktioniert. Zeile 3: Notepad++ aufrufen und "%name:~6% als Parameter übergeben.

          %var:~start,len% ist die Substring-Operation in Windows Batches. Der Start ist nullbasierend, die Länge ist optional. Es werden die ersten 6 Zeichen übersprungen, also diese Zeichenfolge: "trex:. Da auf diese Weise das Anführungszeichen auch verschwindet, muss es danach wieder hinzugefügt werden, deshalb steht da "%name:~6% und nicht %name:~6%. Näheres zur Variablenakrobatik in Windows Batches findet man auf der Kommandozeile mit "help set", "help if" und "help for".

          Setze den Editor deines Vertrauens ein, speichere das Script an einer Dir genehmen Stelle, und ändere im command Key den hinterlegten Befehl so ab, dass CMD /C das Script aufruft. Testen kannst Du es von der Windows Befehlszeile aus. Wenn das Script trex.cmd heißt, gib in dem Ordner, wo es liegt, einfach
          trex "trex:dateiname"
          ein - mit einem passenden Dateinamen natürlich. Wenn Windows das Script als URL Handler aufruft, ist der Windows Systemordner das aktuelle Verzeichnis. Du solltest also immer nur Dateien mit absolutem Pfad übergeben.

          Wenn Du den URL Handler bei jemand anderem installieren willst, exportiere im REGEDIT den trex-Schlüssel und importiere ihn auf dem Zielgerät. Das Treiberscript muss natürlich auch dahin.

          Ich würde annehmen, dass das Treiberscript auch von einem Netzwerklaufwerk geladen werden kann…

          Good Luck!

          Rolf

          --
          sumpsi - posui - obstruxi
  2. ich würde gerne eine Datei so im HTML verlinken, dass es in meinem Standard Texteditor aufgeht - also ein Programm außerhalb des Browsers. Es geht darum, dass ich die Datei auch bearbeiten kann.

    Windows 10. Bei der Datei geht es um eine php Datei - ich hoffe das verkompliziert die Sache nicht.

    Das PHP kann Dir evtl. sogar helfen. Spricht irgendwas dagegen, dass Du Dir den Pfad im Script einfach so aufbereitest, wie Du ihn für den Editor benötigst? Dann ab damit in einen HTML-Kommentar oben im Kopf. Quelltext anzeigen, Pfad kopieren und im Editor öffnen.