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 |