概要:在本教程中,您将学习如何使用 JavaScript 重定向到新的 URL 或页面。
JavaScript 重定向简介
有时,您希望将用户从一个页面重定向到另一个具有不同 URL 的页面。
例如,您可以创建一个应用程序登录页面,根据智能手机的操作系统,将用户完全重定向到 Google Play 或 Apple Store。
为此,您需要
- 检测智能手机的操作系统
- 如果操作系统为 iOS,则重定向到 Apple Store;如果操作系统为 Android,则重定向到 Google Play。
重定向可以使用 Web 浏览器中的 JavaScript 重定向 API 完成。
重要的是要注意,JavaScript 重定向完全在 Web 浏览器中运行。因此,它不像服务器重定向那样返回状态代码 301(永久移动)。
因此,如果您将站点移动到单独的域或为旧页面创建新的 URL,则应始终使用服务器重定向。
重定向到新的 URL
要将 Web 浏览器从当前页面重定向到新的 URL,请使用location
对象
location.href = 'new_url';
Code language: JavaScript (javascript)
例如
location.href = 'https://tutorial.javascript.ac.cn/';
Code language: JavaScript (javascript)
将值分配给location
对象的href
属性与调用location
对象的assign()
方法的效果相同
location.assign('https://tutorial.javascript.ac.cn/');
Code language: JavaScript (javascript)
这两个调用都将重定向到新的 URL,并在浏览器的历史记录堆栈中创建一个条目。这意味着您可以通过浏览器的后退按钮返回到上一页。
要重定向到新的 URL 而不创建浏览器的历史记录堆栈中的新条目,请使用location
对象的replace()
方法
location.replace('https://tutorial.javascript.ac.cn/');
Code language: JavaScript (javascript)
以下示例创建一个页面,如果操作系统为 Android 或 iOS,则将 Web 浏览器重定向到 Google Play 或 Apple Store。否则,它将显示一条消息,指示不支持该操作系统
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JavaScript Redirect</title>
</head>
<body>
<div class="message"></div>
<script src="js/app.js"></script>
</body>
</html>
Code language: HTML, XML (xml)
js/app.js
const apps = {
Android: 'https://play.google.com/',
iOS: 'https://www.apple.com/store',
};
const platform = () => {
let userAgent = navigator.userAgent || navigator.vendor || window.opera;
if (/windows phone/i.test(userAgent)) return 'Windows Phone';
if (/android/i.test(userAgent)) return 'Android';
if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) return 'iOS';
return null;
};
const redirect = () => {
let os = platform();
if (os in apps) {
location.replace(apps[os]);
} else {
const message = document.querySelector('.message');
message.innerText = 'Your OS is not supported';
}
};
redirect();
Code language: JavaScript (javascript)
工作原理。
首先,定义一个apps
对象,其键为操作系统,值为 Google Play 和 Apple Store 的 URL
const apps = {
Android: 'https://play.google.com/',
iOS: 'https://www.apple.com/store',
};
Code language: JavaScript (javascript)
其次,定义一个检测操作系统的函数
const platform = () => {
let userAgent = navigator.userAgent || navigator.vendor || window.opera;
if (/windows phone/i.test(userAgent)) return 'Windows Phone';
if (/android/i.test(userAgent)) return 'Android';
if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) return 'iOS';
return null;
};
Code language: JavaScript (javascript)
第三,创建redirect()
函数,该函数检测操作系统并根据检测到的操作系统重定向 Web 浏览器
const redirect = () => {
let os = platform();
if (os in apps) {
location.replace(apps[os]);
} else {
const message = document.querySelector('.message');
message.innerText = 'Your OS is not supported';
}
};
Code language: JavaScript (javascript)
最后,调用redirect()
函数
redirect();
重定向到相对 URL
以下脚本重定向到about.html
,它与当前页面处于同一级别。
location.href = 'about.html';
Code language: JavaScript (javascript)
以下脚本重定向到位于root
文件夹中的contact.html
页面
location.href = '/contact.html';
Code language: JavaScript (javascript)
页面加载时重定向
如果您想在页面加载时重定向到新页面,请使用以下代码
window.onload = function() {
location.href = "https://tutorial.javascript.ac.cn/";
}
Code language: JavaScript (javascript)
概要
- 要重定向到新的 URL 或页面,请将新的 URL 分配给
location.href
属性或使用location.assign()
方法。 location.replace()
方法确实会重定向到新的 URL,但不会在浏览器的历史记录堆栈中创建条目。