Der Martin: zulässige Protokolle für URL() constructor

Beitrag lesen

Hi Michael,

Mit dem URL constructor kann man sehr gut relative URLs auflösen, was nicht immer sehr trivial ist. Und dafür nutze ich es auch. Zum Beispiel new URL(relativePath, baseURL).toString()

okay, das hört sich sinnvoll an.

Aber ich würde doch spontan sagen: Alle die Protokolle, die dem Betriebssystem, unter dem der Code läuft, bekannt sind.

Wie erkennt eine JS-Engine, welche Protokolle vom OS unterstützt werden.

Gar nicht. Sie muss es einfach annehmen.

und http ist ja nicht wirklich ein OS-Protokoll (?)

Nicht im engeren Sinn. Aber all diese Anwendungsprotokolle müssen vom TCP/IP-Protokollstack erkannt und unterstützt werden, der seinerseits dem OS angegliedert ist.

Unter Windows wird zum Beispiel das Protokoll tel: erkannt, sobald Skype oder eine vergleichbare Applikation installiert ist und sich dafür zuständig erklärt; dasselbe gilt für das Pseudoprotokoll onenote:, das von der Notiz-Applikation OneNote unterstützt wird (die locker mit der MS-Office-Suite zusammenhängt).

Nein, das Beispiel sollte nur veranschaulichen, dass beim ersten alert die Leerzeichen in der URL gewandelt werden. Beim zweiten Alert mit dem protocol scheme "zip:" werden die Leerzeichen nicht in %20 gewandelt.

Vermutlich weil sich kein Handler findet, der sich für zip: zuständig erklärt. Also bleibt das unbehandelt.

Interessant ist aber, dass die relativen URL trotzdem richtig aufgelöst werden.

In der Tat, das überrascht mich auch.

Bei "file://" wird z.B. auch gewandelt. Bei "resource://" aber nicht, obwohl das protocol scheme bekannt ist. (grübel)

Sowohl http:, als auch file:, als auch ftp: sind Standardprotokolle, die vom TCP/IP-Protokollstack normalerweise out of the box unterstützt werden. Dagegen ist mir resource: unbekannt.

Vermutlich ja: Installiere einen Handler für das gewünschte Protokoll, der die nötige Funktionalität bereitstellt.

Wie meinst du das?

Ein Programm oder eine Bibliothek (DLL), das diese Funktionalität mitbringt.

Der Einsatzzweck bei mir ist eine Zip-Datei, deren Inhalt mit JavaScript in ein JS-Object entpackt wird. Die Dateien in der Zip-Datei enthalten Verlinkungen untereinander, die für die Verarbeitung aufgelöst werden müssen.

Dazu musst du nicht nur das Protokoll erkennen, sondern auch die zugehörige Funktionalität (Zugriff auf zip-Archive) im Hintergrund bereitstellen. Das heißt, du musst dich darauf verlassen, dass beim Client eine passende Software installiert ist.

Ciao,
 Martin

--
Ich stamme aus Ironien, einem Land am sarkastischen Ozean.