为什么此代码生成链接?

时间:2017-04-17 06:22:50

标签: javascript html href

此代码快照:



<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>
&#13;
&#13;
&#13;

在Chrome中打开它,点击链接Open "prompt" dialog,然后点击OK。它将在当前网页中生成一个链接。为什么呢?

我看到prompt()的文件。它说prompt()返回一个用户输入的字符串,在本例中为<a href=javascript:window.close();> Close me </a >

我尝试将代码中的href替换为prompt()的返回值:

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

然后链接无法打开并显示错误:找不到您的文件

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

这与window.prompt()target="new"无关,这是由于javascript:协议的行为造成的。我在下面做了一个简化的例子:

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

在上面的示例中,点击click_me后,页面内容将被清除,只显示文字result_content,没有content_ahead范围,没有click_me链接更多。

说明:

  1. 点击click_me后,浏览器将执行javascript:协议定义的javascript程序。
  2. 执行后,如果返回String,浏览器将把它作为“新页面”的内容并“打开”它。无论如何,它与hrefhttp:https://的逻辑相同 - 获取数据并将其显示为新页面。您可以在Firefox中进行此实验,即使地址栏已更改为javascript://(function(){return 'result_content'})()
  3. 执行后,如果没有返回String,则“新页面”没有内容。浏览器将继续显示旧的。
  4. 供参考,这是一个旧的article,用于描述javascript:网址中的javascript语句:

      

    javascript:URL中使用的JavaScript语句不应返回任何值。例如,alert()方法不返回值;换句话说,它返回undefined。如果语句返回undefined,则浏览器只执行它。但是,如果它返回一个显式值,浏览器将加载一个新页面,其中包含位置栏中的javascript:URL,以及页面正文中返回的值。