做网页开发,页面跳转大概是最常碰到的需求之一了。"点击一下,跳到另一个页面",听起来再简单不过,但背后的实现方式其实五花八门,具体选哪一种,主要看你在什么平台上写代码、用的什么技术栈。
最基础的当然是 HTML 的 标签,在 href 属性里写上目标地址就完事:访问示例网站。这种方式简单直接,也是搜索引擎最容易理解的跳转形式,几乎零成本。
HTML 里还藏着一种不太起眼的玩法——meta 标签。在 里加一行 ,页面加载完就会自动跳到指定地址。content 里的数字代表等待秒数,写成 5 就等 5 秒再跳。早些年网站搬家时常用它做过渡页,配一句"本站已迁移,正在为您跳转"之类的提示。不过这种写法对 SEO 不太友好,如今已经越来越少见了。
到了 JavaScript 层面,花样就多了。最常用的是 window.location.href,直接赋一个新地址过去:window.location.href = 'https://www.example.com'。效果和点链接差不多,浏览器历史里会留下记录,用户按后退键还能回来。
要是不想让用户退回来呢?换 window.location.replace('https://www.example.com')。它会把当前页面从历史记录里替换掉,后退键随之失效。这个特性在某些场景特别实用,比如登录成功后跳首页——你肯定不希望用户一按后退又回到登录页,重新输一遍账号密码。

还有个 window.open,写法是 window.open('https://www.example.com', '_blank'),其中 '_blank' 表示在新窗口或新标签页打开。不过得留个心眼:如果这行代码不是由用户点击直接触发的,很多浏览器会把它当成弹窗广告拦下来,这也是它最常被吐槽的地方。

如果项目用的是 Vue.js 这类前端框架,玩法又不一样了。引入 Vue Router 之后,官方推荐用 组件:关于我们。它渲染出来本质上还是个 标签,但接管了点击事件,按路由配置完成跳转,全程不刷新页面,体验顺滑不少。
当然,组件写法只覆盖模板里的静态导航。很多跳转其实发生在逻辑代码里——表单提交成功后、权限校验通过后——这时就得用编程式导航:this.$router.push('/about')。不想留历史记录的话,还有对应的 replace 方法,思路和原生 JS 一脉相承。
跳转也不全是前端的事。有些场景需要后端来"指挥"浏览器:旧接口地址废弃了,或者某个页面做了迁移,服务器会直接返回一个 HTTP 重定向响应。以 Node.js 的 Express 框架为例,一行 res.redirect('/new-path') 就能搞定,浏览器收到响应后自动带着用户去新地址,整个过程对前端代码完全透明。
移动应用里则是另一套逻辑。iOS 和 Android 各有自己的页面导航机制——Android 开发里常见的 Intent、iOS 的导航控制器,干的都是"从一个界面到另一个界面"的活,只是跟浏览器的 URL 体系不是一回事。

方法摸清了,实操时还有几个坑得留心。一是目标地址的有效性:跳转前最好确认 URL 没写错、用户也有访问权限,不然一头撞进 404 或权限拦截页,体验会非常糟糕。二是别在用户不知情的情况下偷偷跳转,自动跳转尤其要给出明确提示,否则很容易被当成恶意行为。三是把异常想在前面:网络断了怎么办?目标页面不存在怎么办?给用户一个清晰的反馈,总好过让页面卡死或白屏。
说到底,跳转这件事没有绝对的好坏,只有合不合适。写静态页面, 标签足矣;做单页应用,Router 是标配;需要服务端控制,就上重定向。先想清楚场景,再结合用户体验做选择,基本不会出错。

Entrar Agora