Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

javascript:-URLs

Warnung: Von der Verwendung von javascript:-URLs im Web wird abgeraten, da sie zur Ausführung beliebigen Codes führen kann, ähnlich den Auswirkungen der Verwendung von eval(). Sie kann außerdem die Barrierefreiheit beeinträchtigen, da sie vom normalen Linkverhalten abweicht.

JavaScript-URLs, URLs mit dem Präfix des javascript:-Schemas, 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 sie 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. Dazu gehören unter anderem:

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

Hinweis: Einige andere Kontexte, die URLs verwenden, wie etwa das href-Attribut von <link>-Elementen, erlauben keine javascript:-URLs, da sie Ressourcenstandorte und keine Navigationsziele sind. Wenn Sie in diesen Fällen 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, parst und führt er den Skriptkörper aus. Das Skript kann einen Abschlusswert haben (keinen Rückgabewert), der dem Wert entspricht, den das Skript bei Ausführung mit eval() hätte. Wenn die letzte Anweisung ein Ausdruck ist, ist der Abschlusswert der Wert dieses Ausdrucks. Wenn dieser Abschlusswert ein String ist, wird dieser String als HTML-Dokument behandelt und der Browser navigiert zu einem neuen Dokument mit diesem Inhalt, wobei dieselbe URL wie für die aktuelle Seite verwendet wird. Es wird kein Verlaufseintrag erstellt. Wenn der Abschlusswert kein String ist, führt der Browser nur den Code aus und navigiert nicht. Daher wird häufig empfohlen, einem Skript, das mit einem Funktionsaufruf wie javascript:foo() endet, void voranzustellen, um eine versehentliche Navigation zu verhindern, falls die Funktion zufällig einen String zurückgibt.

Die javascript:-Navigation kann durch Einstellungen der Content Security Policy, insbesondere durch script-src, blockiert werden.

Beispiele

Verwendung von javascript:-URLs als href-Ziele

In diesem Beispiel wird das href-Attribut eines <a>-Elements auf eine javascript:-URL gesetzt, die beim Anklicken eine Meldung 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, da der Link tatsächlich kein Hyperlink ist. Erwägen Sie stattdessen, ihn zu einem Button zu machen:

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

In diesem Beispiel wird 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 es keine Möglichkeit gibt, zur vorherigen Seite zurückzukehren, ohne die Seite neu zu laden, da javascript:-URLs keine Verlaufseinträge erstellen.

Verwendung von javascript:-URLs als Formularaktionen

In diesem Beispiel wird das action-Attribut eines <form>-Elements auf eine javascript:-URL gesetzt, die beim Absenden eine Meldung 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 warten und es mit JavaScript zu verarbeiten:

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 wird 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>

Erwägen Sie stattdessen, 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 wird die Eigenschaft window.location auf eine javascript:-URL gesetzt, die zu einer neuen Seite mit dem Inhalt „Hello, world!“ navigiert:

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

Erwägen Sie stattdessen, DOM-APIs zu verwenden, um den Seiteninhalt zu ändern. Zum Beispiel:

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

Spezifikationen

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

Siehe auch