如何在跳转至somelink.com时设置document.referrer为指定值?
关于跳转后自定义
document.referrer的可行性分析 嘿,直接给你结论:你想要的效果确实无法实现,下面给你拆解具体原因:
首先看你写的这段代码:
<script> Object.defineProperty(document, "referrer", {get : function(){ return "myreferrer.com"; }}); //document.location="somelink.com"; </script>
你修改的是当前页面的document.referrer的getter,但这个改动只在当前页面生效。一旦执行document.location="somelink.com"跳转,当前页面会被浏览器卸载,所有脚本停止运行,新加载的somelink.com页面是完全独立的执行环境——它的document.referrer由浏览器根据实际导航来源决定,和你之前页面的脚本修改毫无关系。
为什么没法控制新页面的document.referrer?
document.referrer的值本质是浏览器根据导航行为生成的安全属性:
- 当从页面A跳转到页面B时,浏览器会在请求页面B的HTTP头里带上
Referer字段(值为页面A的URL),页面B的document.referrer就对应这个字段的值; - 前端脚本无法直接篡改新页面的
document.referrer,这是浏览器的安全机制,目的是防止恶意网站伪造来源信息,破坏Referer机制的可信度。
有没有变通方法?
目前没有合法的前端手段能让跳转后的页面document.referrer变成你指定的任意值:
- 用
<meta name="referrer">标签只能控制Referer的发送策略(比如不发送、仅同源发送等),但无法指定自定义值; - 无论是脚本跳转、a标签跳转还是表单提交,最终的referrer都由浏览器根据实际来源生成,你没法强制设置成
myreferrer.com。
简单来说,浏览器不会允许你伪造跳转后的来源信息,这是安全机制的一部分,所以你的需求目前没法实现。
内容的提问来源于stack exchange,提问作者JAM AICA
相关产品推荐
相关产品推荐

