document.referrer用于获取上一页URL,但受直接输入、刷新、HTTPS→HTTP跳转、Referrer-Policy、微信环境等限制;performance.getEntriesByType("navigation")[0].type可判断导航类型,如back_forward。
可以通过 document.referrer 和 performance.navigation(已弃用)或更现代的 performance.getentriesbytype("navigation") 获取页面加载来源信息,但要注意浏览器限制和隐私策略影响。
获取上一页 URL(最常用)
document.referrer 返回链接到当前页面的上一个页面的 URL 字符串。它由浏览器自动设置,但受以下因素影响:
- 用户直接在地址栏输入或刷新页面时,值为空字符串
- 从 HTTPS 页面跳转到 HTTP 页面时,出于安全考虑,referrer 会被清空
- 设置了
Referrer-Policy(如no-referrer或strict-origin)的站点会限制或截断 referrer 内容 - 从本地文件(
file://)打开页面时,通常为空
判断页面是否是通过前进/后退按钮加载
使用 performance.getEntriesByType("navigation")[0] 可以读取导航类型:
-
type: "navigate":正常点击链接或输入 URL -
type: "reload":页面被刷新 -
type: "back_forward":来自浏览器前进/后退缓存(bfcache) -
type: "prerender":页面曾被预渲染(较少见)
示例代码:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
const navEntry = performance.getEntriesByType("navigation")[0];<br>if (navEntry && navEntry.type === "back_forward") {<br> console.log("用户通过前进/后退按钮访问");<br>}
识别入口来源(如搜索引擎、广告、APP内嵌)
仅靠 referrer 不够可靠,可结合 URL 查询参数增强判断:
立即学习“Java免费学习笔记(深入)”;
- 检查
location.search中常见参数,如utm_source、from=weixin、channel=ios_app - 对 referrer 做域名匹配(如包含
google.、baidu.、t.co),注意大小写和协议前缀 - 注意:部分平台(如微信内置浏览器)可能不传 referrer,需依赖自定义参数传递
注意隐私与兼容性边界
现代浏览器越来越限制 referrer 信息暴露:
- Chrome、Firefox 默认采用
strict-origin-when-cross-origin策略 - iOS Safari 对第三方 referrer 过滤更严格,尤其在 PWA 或 WKWebView 中
- 无法通过 JS 获取用户手动输入的来源(无 referrer),也无法绕过 referrer policy
- 不要将 referrer 用于安全校验(如权限控制),它可被轻易伪造或缺失

















