javascript: URL
JavaScript URL,以javascript:
方案为前缀的 URL,用作伪导航目标,在浏览器尝试导航时执行 JavaScript。如果 URL 计算结果为字符串,则将其视为 HTML 并由浏览器呈现。
语法
JavaScript URL 以javascript:
方案开头,后跟 JavaScript 代码。该代码将被解析为脚本。
javascript:<script>
描述
javascript:
URL 可用于任何 URL 作为导航目标的地方。这包括但不限于
注意:某些其他使用 URL 的上下文(例如<link>
元素的href
属性)不允许javascript:
URL,因为它们是资源位置,而不是导航目标。对于这些情况,如果要内联编写 JavaScript,请使用data:
URL,并使用text/javascript
MIME 类型。
当浏览器尝试导航到此类位置时,它会解析并执行脚本主体。脚本可能具有完成值(不是返回值),如果使用eval()
执行脚本,则此值与该值相同。如果最后一个语句是表达式,则完成值为该表达式的值。如果此完成值为字符串,则该字符串将被视为 HTML 文档,浏览器将使用与当前页面相同的 URL 导航到具有该内容的新文档。不会创建历史记录条目。如果完成值不是字符串,则浏览器仅执行代码而不导航。因此,通常建议如果脚本以函数调用(如javascript:foo()
)结尾,则应在其前面加上void
,以防止在函数碰巧返回字符串时意外导航。
javascript:
导航可能会被内容安全策略设置(尤其是script-src
)阻止。
示例
使用javascript:
URL 作为 href 目标
在此示例中,<a>
元素的href
属性设置为javascript:
URL,单击时会显示一条消息
<a href="javascript:alert('Hello, world!')">Click me</a>
因为alert()
返回undefined
,所以浏览器不会导航到新页面。这是一种不好的做法,因为链接实际上不是超链接。考虑将其改为按钮
<button id="btn">Click me</button>
<script>
document.getElementById("btn").addEventListener("click", () => {
alert("Hello, world!");
});
</script>
在此示例中,<a>
元素的href
属性设置为javascript:
URL,该 URL 导航到一个包含“Hello, world!”内容的新页面。
<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>
请注意,由于javascript:
URL 不会创建历史记录条目,因此如果没有刷新,则无法返回到上一页。
使用javascript:
URL 作为表单操作
在此示例中,<form>
元素的action
属性设置为javascript:
URL,提交时会显示一条消息
<form action="javascript:alert(myInput.value)">
<input id="myInput" />
<input type="submit" value="Submit" />
</form>
不要这样做,请考虑侦听表单的submit
事件并使用 JavaScript 处理它
<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>
使用javascript:
URL 作为 iframe 源
在此示例中,<iframe>
元素的src
属性设置为javascript:
URL,该 URL 导航到一个包含“Hello, world!”内容的新页面。
<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>
不要这样做,请考虑改为设置srcdoc
属性
<iframe id="myFrame"></iframe>
<script>
document.getElementById("myFrame").srcdoc = "Hello, world!";
</script>
使用javascript:
URL 与 window.location
在此示例中,window.location
属性设置为javascript:
URL,该 URL 导航到一个包含“Hello, world!”内容的新页面。
window.location = "javascript:'Hello world!'";
不要这样做,请考虑使用DOM API修改页面内容。例如
document.body.textContent = "Hello, world!";
规范
规范 |
---|
HTML 标准 # the-javascript:-url-special-case |