2017-04-17 4 views
1

Dieser Code Snap:Warum generiert dieser Code eine Verbindung?

<a href="javascript:window.prompt('Press OK button to insert this link in the new window ...', '<a href=javascript:window.close();> Close me 
 
      </a >')" target="new"> 
 
     Open "prompt" dialog 
 
</a>

öffnen in Chrome, klicken Sie auf Link Open "prompt" dialog, dann OK klicken. Es erzeugt einen Link in der aktuellen Webseite. Warum?

Ich sehe Dokument von prompt(). Er sagt prompt() gibt eine Zeichenkette zurück, in die der Benutzer eingibt, in diesem Fall: <a href=javascript:window.close();> Close me </a >.

Ich versuchte href im Code auf den Rückgabewert von prompt() zu ersetzen:

<a href="'<a href=javascript:window.close();> Close me </a >'" target="new"> 
 
    Open "prompt" dialog 
 
</a>

Dann wird die Verbindung fehlgeschlagen mit Fehler öffnen: Ihre Datei nicht gefunden wurde.

Könnte jemand das erklären?

Antwort

4

Dies hat nichts mit window.prompt() oder target="new" zu tun, es ist aufgrund javascript: Protokoll Verhalten. Ich habe ein vereinfachtes Beispiel unten gemacht:

<span>content_ahead</span> 
<a href="javascript:(function(){return 'result_content'})()"> 
    click_me 
</a> 

Im obigen Beispiel, wenn click_me angeklickt wird, wird der Seiteninhalt weggewischt und nur Text result_content, keine content_ahead Spanne und keinen click_me Link nicht mehr.

Erläuterung:

  1. Wenn click_me geklickt wird, wird Browser JavaScript-Programm ausführen, indem javascript: Protokoll definiert.
  2. Nach der Ausführung, wenn ein String zurückgegeben wird, wird der Browser es als Inhalt der "neuen Seite" nehmen und "öffnen". Wie auch immer, es ist die gleiche Logik wie href zu http: oder https:// - Daten abrufen und als neue Seite anzeigen. Sie können dieses Experiment in Firefox durchführen, wo sogar die Adressleiste in javascript://(function(){return 'result_content'})() geändert wird.
  3. Nach der Ausführung, wenn kein String zurückgegeben wird, gibt es keinen Inhalt für die "neue Seite". Der Browser zeigt weiterhin den alten an.

Als Referenz hier ist ein alter article die Javascript-Anweisung in javascript: URL zu beschreiben:

The JavaScript statement used in a javascript: URL should not return any value. For example, the alert() method doesn't return a value; in other words, it returns undefined. If the statement returns undefined, the browser simply executes it. However, if it returns an explicit value, the browser loads a new page, with the javascript: URL in the Location bar, and the returned value in the body of the page.