javascript: URLs

Warnung: Die Verwendung von javascript:-URLs im Web wird nicht empfohlen, da sie zur Ausführung von beliebigem Code führen können, ähnlich den Konsequenzen der Nutzung von eval(). Dies kann auch die Barrierefreiheit verringern, da es vom normalen Linkverhalten abweicht.

JavaScript-URLs, URLs mit dem Präfix javascript:, werden als gefälschte Navigationsziele verwendet, die JavaScript ausführen, wenn der Browser versucht zu navigieren. Wenn die URL zu einem String ausgewertet wird, wird dieser als HTML behandelt und vom Browser gerendert.

Syntax

url
javascript:<script>
javascript:

Das Schema der URL.

<script>

Der auszuführende JavaScript-Code. Der Code wird als Skript geparst.

Beschreibung

javascript:-URLs können überall verwendet werden, wo eine URL ein Navigationsziel ist. Dies schließt unter anderem ein:

  • Das href-Attribut eines <a>- oder <area>-Elements.
  • Das action-Attribut eines <form>-Elements.
  • Das src-Attribut eines <iframe>-Elements.
  • Die window.location-JavaScript-Eigenschaft.
  • Die Browser-Adressleiste selbst.

Hinweis: Einige andere Kontexte, die URLs verwenden, wie das href-Attribut von <link>-Elementen, erlauben keine javascript:-URLs, da sie Ressourcenziele und keine Navigationsziele sind. In diesen Fällen, wenn Sie JavaScript inline schreiben möchten, verwenden Sie data:-URLs mit dem MIME-Typ text/javascript.

Wenn ein Browser versucht, zu einem solchen Ort zu navigieren, wird der Skriptkörper geparst und ausgeführt. Das Skript kann einen Vollendungswert (kein Rückgabewert) haben, was dem entspricht, als würde das Skript mit eval() ausgeführt. Wenn die letzte Anweisung ein Ausdruck ist, ist der Vollendungswert der Wert dieses Ausdrucks. Wenn dieser Vollendungswert ein String ist, wird dieser String als HTML-Dokument behandelt und der Browser navigiert zu einem neuen Dokument mit diesem Inhalt, wobei die gleiche URL wie die aktuelle Seite verwendet wird. Es wird kein Verlaufseintrag erstellt. Wenn der Vollendungswert kein String ist, führt der Browser nur den Code aus und navigiert nicht. Daher wird oft empfohlen, wenn das Skript mit einem Funktionsaufruf wie javascript:foo() endet, es mit void zu prefixen, um eine versehentliche Navigation zu verhindern, falls die Funktion zufällig einen String zurückgibt.

javascript:-Navigation kann durch die Einstellungen der Content Security Policy (CSP) blockiert werden, insbesondere durch script-src.

Beispiele

Verwendung von javascript:-URLs als href-Ziele

In diesem Beispiel ist das href-Attribut eines <a>-Elements auf eine javascript:-URL gesetzt, die eine Nachricht beim Klicken anzeigt:

html
<a href="javascript:alert('Hello, world!')">Click me</a>

Da alert() undefined zurückgibt, navigiert der Browser nicht zu einer neuen Seite. Dies ist eine schlechte Praxis, weil der Link eigentlich kein Hyperlink ist. Erwägen Sie stattdessen, daraus einen Button zu machen:

html
<button id="btn">Click me</button>
<script>
  document.getElementById("btn").addEventListener("click", () => {
    alert("Hello, world!");
  });
</script>

In diesem Beispiel ist das href-Attribut eines <a>-Elements auf eine javascript:-URL gesetzt, die zu einer neuen Seite mit dem Inhalt "Hello, world!" navigiert:

html
<a href="javascript:pageContent">Click me</a>
<script>
  // Use a var so it becomes a global variable and can be read elsewhere
  var pageContent = "Hello, world!";
</script>

Beachten Sie, dass javascript:-URLs keine Verlaufseinträge erstellen, sodass es keinen Weg gibt, zur vorherigen Seite zurückzukehren, ohne zu aktualisieren.

Verwendung von javascript:-URLs als Formularaktionen

In diesem Beispiel ist das action-Attribut eines <form>-Elements auf eine javascript:-URL gesetzt, die eine Nachricht bei der Übermittlung anzeigt:

html
<form action="javascript:alert(myInput.value)">
  <input id="myInput" />
  <input type="submit" value="Submit" />
</form>

Erwägen Sie stattdessen, auf das submit-Ereignis des Formulars zu hören und es mit JavaScript zu bearbeiten:

html
<form id="myForm">
  <input id="myInput" />
  <input type="submit" value="Submit" />
</form>
<script>
  document.getElementById("myForm").addEventListener("submit", (event) => {
    event.preventDefault();
    alert(document.getElementById("myInput").value);
  });
</script>

Verwendung von javascript:-URLs als iframe-Quellen

In diesem Beispiel ist das src-Attribut eines <iframe>-Elements auf eine javascript:-URL gesetzt, die zu einer neuen Seite mit dem Inhalt "Hello, world!" navigiert:

html
<iframe src="javascript:pageContent"></iframe>
<script>
  // Use a var so it becomes a global variable and can be read elsewhere
  var pageContent = "Hello, world!";
</script>

Überlegen Sie anstelle dessen, das srcdoc-Attribut zu setzen:

html
<iframe id="myFrame"></iframe>
<script>
  document.getElementById("myFrame").srcdoc = "Hello, world!";
</script>

Verwendung von javascript:-URLs mit window.location

In diesem Beispiel ist die window.location-Eigenschaft auf eine javascript:-URL gesetzt, die zu einer neuen Seite mit dem Inhalt "Hello, world!" navigiert:

js
window.location = "javascript:'Hello world!'";

Anstelle dessen könnten Sie die DOM-APIs verwenden, um den Seiteninhalt zu ändern. Zum Beispiel:

js
document.body.textContent = "Hello, world!";

Spezifikationen

Specification
HTML
# the-javascript:-url-special-case

Siehe auch