此代码快照:
<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;
在Chrome中打开它,点击链接Open "prompt" dialog
,然后点击OK
。它将在当前网页中生成一个链接。为什么呢?
我看到prompt()
的文件。它说prompt()
返回一个用户输入的字符串,在本例中为<a href=javascript:window.close();> Close me </a >
。
我尝试将代码中的href
替换为prompt()
的返回值:
<a href="'<a href=javascript:window.close();> Close me </a >'" target="new">
Open "prompt" dialog
</a>
&#13;
然后链接无法打开并显示错误:找不到您的文件。
有人可以解释一下吗?
答案 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
链接更多。
说明:
click_me
后,浏览器将执行javascript:
协议定义的javascript程序。href
到http:
或https://
的逻辑相同 - 获取数据并将其显示为新页面。您可以在Firefox中进行此实验,即使地址栏已更改为javascript://(function(){return 'result_content'})()
。供参考,这是一个旧的article,用于描述javascript:
网址中的javascript语句:
javascript:URL中使用的JavaScript语句不应返回任何值。例如,alert()方法不返回值;换句话说,它返回undefined。如果语句返回undefined,则浏览器只执行它。但是,如果它返回一个显式值,浏览器将加载一个新页面,其中包含位置栏中的javascript:URL,以及页面正文中返回的值。