总结
- 由于菜单栏中前进后退的存在,document.referrer获取页面来源的方法并不可靠
- 可以通过判断 window.opener 是否为 null,来限制通过地址栏输入url访问。但是必须使用 window.open 来实现页面跳转
document.referrer
定义
- 打开到当前页面的那个页面的URI
- A Uniform Resource Identifier (URI) 是一个紧凑的字符串用来标示抽象或物理资源。
- 它包括了URL和URN
- URL和URN的区别在于,URL带有网络访问协议,例如
ftp://ftp.is.co.za/rfc/rfc1808.txt
(tel:+1-816-555-1212
不属于URL)
返回空字符串的情况
- 纠错:跨域只有在特殊的几种方法不可以,其他都是可行的
- 纠错:https跳转http谷歌和IE9亲测都可以
- a标签跨域可以获得
- meta标签来控制不让浏览器发送referer
<meta content="never" name="referrer">
- 请参考
https://www.cnblogs.com/qq3279338858/p/10844401.html
- a标签设置rel="noreferrer"(兼容IE7+)
- 直接在浏览器中输入地址
- 通过修改Location进行页面导航的方法,除了以下几种,其余都能成功获取
- location.assign:IE9跨域后无法获取;同域时谷歌和IE都可以获取
- location.reload:谷歌可以,IE9不可以。带不带参数都一样
- history
- 所有方法在IE9均无法获得(包括back 、forward、go)
- 谷歌也只有以下方法可以(pushState、replaceState)
- window.open方式打开新窗口
- 鼠标拖拽打开新窗口
- 点击Flash内部链接,各个浏览器效果不同(不详述)
- 在微信对话框中,点击进入微信自身浏览器
- 扫码进入微信或QQ的浏览器
window.opener
定义
- 如果当前窗口是由另一个窗口打开的, window.opener保留了那个窗口的引用(window对象). 如果当前窗口不是由其他窗口打开的, 则该属性返回 null.
能够获取的条件
- 只有通过window.open才会返回对象,其他都是null
- 跨域时谷歌返回的对象,不能访问资源,只能对窗口本身进行操作
- IE9同域时可以通过访问 window.opener.location.href 对象去获取丢失的referrer信息。跨域依然能够获取到对象,但location为空