tag:forum.selfhtml.org,2005:/self Textfile via Browsern im Editor öffnen – SELFHTML-Forum 2022-04-05T14:53:52Z https://forum.selfhtml.org/self/2022/apr/05/textfile-via-browsern-im-editor-offnen/1798045#m1798045 T-Rex 2022-04-05T12:23:47Z 2022-04-05T12:23:47Z Textfile via Browsern im Editor öffnen <p>Moin,</p> <p>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.</p> <p>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"</p> <p>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.</p> <p>Benutzt wird aktueller Chrome. Aktuellstes Xampp. Windows 10. Bei der Datei geht es um eine php Datei - ich hoffe das verkompliziert die Sache nicht.</p> <p>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.</p> <p>Gruß aktueller T-Rex</p> https://forum.selfhtml.org/self/2022/apr/05/textfile-via-browsern-im-editor-offnen/1798046#m1798046 Robert B. 2022-04-05T12:58:11Z 2022-04-05T12:58:11Z Textfile via Browsern im Editor öffnen <p>Moin T-Rex,</p> <blockquote> <p>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"</p> <p>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.</p> <p>Benutzt wird aktueller Chrome. Aktuellstes Xampp. Windows 10. Bei der Datei geht es um eine php Datei - ich hoffe das verkompliziert die Sache nicht.</p> </blockquote> <p>Ich schließe daraus, dass der <code>file</code>-Link in einer Seite auftaucht, die per HTTP(S) ausgeliefert wird. Das wird meines Wissens so einfach nichts:</p> <ul> <li>Das Sicherheitsmodell der Browser lässt aus dem HTTP-Kontext keinen lokalen Zugriff zu.</li> <li>Wenn du die Datei doch per HTTP auslieferst, wird sie noch einmal heruntergeladen.</li> <li>Wenn die Datei mit einem <code>text</code> Content-Type ausgeliefert wird, ist die Chance hoch, dass der Browser die Datei anzeigt.</li> </ul> <blockquote> <p>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.</p> </blockquote> <p>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</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>trex:C:\xampp\htdocs\test\test.txt<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Öffne!<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>a</span><span class="token punctuation">></span></span> </code></pre> <p>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.</p> <p>Viele Grüße<br> Robert</p> https://forum.selfhtml.org/self/2022/apr/05/textfile-via-browsern-im-editor-offnen/1798050#m1798050 Mitleser 2.0 2022-04-05T13:47:27Z 2022-04-05T13:47:27Z Textfile via Browsern im Editor öffnen <blockquote> <p>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.</p> <p>Windows 10. Bei der Datei geht es um eine php Datei - ich hoffe das verkompliziert die Sache nicht.</p> </blockquote> <p>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.</p> https://forum.selfhtml.org/self/2022/apr/05/textfile-via-browsern-im-editor-offnen/1798048#m1798048 T-Rex 2022-04-05T13:21:31Z 2022-04-05T13:21:31Z Textfile via Browsern im Editor öffnen <p>Klingt gut, auch wenn es doof klingt </p> <p>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 .</p> <p>Wie schreibe ich so ein Protokoll-handler?</p> <p>Gruß Protokoll-handler eures Vertrauens trex</p> https://forum.selfhtml.org/self/2022/apr/05/textfile-via-browsern-im-editor-offnen/1798051#m1798051 Robert B. 2022-04-05T13:58:16Z 2022-04-05T13:58:16Z Textfile via Browsern im Editor öffnen <blockquote> <p>Klingt gut, auch wenn es doof klingt </p> <p>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 .</p> </blockquote> <p>Die Frage ist auch, warum da ein HTTP-Server laufen muss?</p> <blockquote> <p>Wie schreibe ich so ein Protokoll-handler?</p> </blockquote> <p>Soweit ich das sehe, ist ein Protokoll-Handler ein Programm, das den kompletten URI als Kommandozeilen-Parameter übergeben bekommt. Für <code>http</code> ist das Programm dein Standard-Browser und die URI kommt als Parameter, z.B.</p> <pre><code class="block">"C:\Program Files\Mozilla\Firefox\firefox.exe" http://localhost/pfad </code></pre> <p>Wenn du also dein eigenes Protokoll <code>trex</code> definierst (weil der Texteditor kein eigenes hat), dann brauchst du ein Programm, dass einen URI der Art</p> <pre><code class="block">trex:C:\xampp\htdocs\test\test.txt </code></pre> <p>entgegennimmt, das <code>trex</code>-Protokoll entfernt und den Dateinamen als Parameter deinem Texteditor übergibt.</p> <p>Die Definition der Protokoll-Handler findest du in der Windows-Registry unter HKEY_CLASSES_ROOT.</p> <p>Viele Grüße<br> Robert</p> https://forum.selfhtml.org/self/2022/apr/05/textfile-via-browsern-im-editor-offnen/1798057#m1798057 Rolf B 2022-04-05T14:53:52Z 2022-04-05T14:53:52Z Textfile via Browsern im Editor öffnen <p>Hallo Robert-rex,</p> <p>Das Zeug ist <a href="https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa767914(v=vs.85)?redirectedfrom=MSDN#app_reg" rel="nofollow noopener noreferrer">hier</a> dokumentiert.</p> <p>Konkret geht das so:</p> <ul> <li>REGEDIT öffnen</li> <li>In HKEY_CLASSES_ROOT einen neuen Schlüssel namens <code>trex</code> einrichten</li> <li>Unter trex einen Key <code>shell</code> anlegen, darin einen Key <code>open</code>, darin einen Key <code>command</code></li> <li>Darin unter (Standard) einen Namen für's Protokoll vergeben (beliebig)</li> <li>Einen Zeichenfolge-Wert (REG_SZ) mit Namen <code>URL Protocol</code> anlegen, Inhalt leer</li> </ul> <p><a href="/images/aee9e358-b4ec-11ec-8990-b42e9947ef30.png" rel="noopener noreferrer"><img src="/images/aee9e358-b4ec-11ec-8990-b42e9947ef30.png?size=medium" alt="" loading="lazy"></a></p> <ul> <li>bei <code>shell</code> unter <code>(Standard)</code> den Wert <code>open</code> eintragen</li> </ul> <p><a href="/images/c55919c4-b4ec-11ec-87aa-b42e9947ef30.png" rel="noopener noreferrer"><img src="/images/c55919c4-b4ec-11ec-87aa-b42e9947ef30.png?size=medium" alt="" loading="lazy"></a></p> <ul> <li>bei <code>command</code> unter <code>(Standard)</code> die auszuführende Befehlszeile eintragen</li> </ul> <p><a href="/images/edd81f58-b4ec-11ec-95e7-b42e9947ef30.png" rel="noopener noreferrer"><img src="/images/edd81f58-b4ec-11ec-95e7-b42e9947ef30.png?size=medium" alt="" loading="lazy"></a></p> <p>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. <code>trex:D:/files/datei.txt</code>, dann kommt das genau so an. Inclusive der Anführungszeichen.</p> <p>Etwas schlimmer: Steht da <code>"trex:D:\files\datei.txt</code>, 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 <code>\</code> zurückübersetzen.</p> <p>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:</p> <pre><code class="block">@echo off set name=%1 C:\t.nt\notepad++\notepad++.exe "%name:~6% </code></pre> <p>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 <code>C:\T</code>. Irgendwann kam WinNT, und der Ordner hieß dann <code>C:\T.NT</code>. Dabei ist es geblieben, dieser Ordner hat bisher jeden Computerumzug treu mitgemacht .</p> <p>Was tut das Script?</p> <p>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 <code>"%name:~6%</code> als Parameter übergeben.</p> <p>%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: <code>"trex:</code>. Da auf diese Weise das Anführungszeichen auch verschwindet, muss es danach wieder hinzugefügt werden, deshalb steht da <code>"%name:~6%</code> und nicht <code>%name:~6%</code>. Näheres zur Variablenakrobatik in Windows Batches findet man auf der Kommandozeile mit "help set", "help if" und "help for".</p> <p>Setze den Editor deines Vertrauens ein, speichere das Script an einer Dir genehmen Stelle, und ändere im <code>command</code> 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<br> <code>trex "trex:dateiname"</code><br> 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.</p> <p>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.</p> <p>Ich würde annehmen, dass das Treiberscript auch von einem Netzwerklaufwerk geladen werden kann…</p> <p>Good Luck!</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div>