我可以跟踪新窗口链接的引用者吗?

Posted

技术标签:

【中文标题】我可以跟踪新窗口链接的引用者吗?【英文标题】:Can I track the referrer of a new window link? 【发布时间】:2011-10-03 21:51:09 【问题描述】:

案例:

站点 A 包含在新窗口中打开站点 B 的链接。 站点 B 中的脚本正在尝试获取站点 A 的 URL。

我的问题:有什么方法可以跟踪使用target="_blank"javascript window.open() 函数打开的新窗口的引用者

如果是,那么有什么办法可以完全隐藏引荐来源网址?

【问题讨论】:

【参考方案1】:

Referrer 位于 HTTP 标头中,因此无论窗口是空白还是新窗口,它都可用。您可以通过以下方式获取 URL:

console.log(document.referrer);

有些网站使用它来保护其网站免受点击劫持之类的攻击,因此在链接页面中隐藏引荐来源网址是不合适的。允许referrer spoofing 的浏览器被认为是不安全的,并且在被发现时往往会被修补。

更新

也许它并不像我想象的那样皱眉。 html5 具有 <a> 的属性,可在 HTTP 标头中不发送引荐来源网址:rel = "noreferrer"

【讨论】:

【参考方案2】:

带有 window.open 的 IE 会丢失引用。只需使用 jQuery 或不使用 jQuery 重写它:

$("<form />").attr("action", "url").attr("target", "_blank").appendTo(document.body).submit();

【讨论】:

有效,但您可能还想明确设置 .attr("method", "GET") 以确保使用 GET 作为动词(而不是 POST)来执行调用。只是我的 2c。【参考方案3】:

如果您可以控制两个页面,请像这样打开窗口:

var myWindow = window.open('http://my_url', 'title', 'width=500,height=350,top=100,left=100');
if(!myWindow.opener) myWindow.opener = self;

附注:给窗口一个标题很重要,否则 IE 会自己拉屎。

在打开的窗口中,您将看到对“opener”的引用:

alert(opener.window.location);

【讨论】:

【参考方案4】:

你检查开瓶器位置了吗?如果我没记错的话,它对我有用。

【讨论】:

【参考方案5】:

最好的办法是:

    var myWindow = window.open('', 'title', 'width=500,height=350,top=100,left=100');
myWindow.location.href = 'redirect.asp';

希望对你有用

【讨论】:

以上是关于我可以跟踪新窗口链接的引用者吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 A 标签上添加一个属性来获取在新选项卡而不是同一窗口中打开的链接吗?

谷歌浏览器怎样设置每次点击连接时都会弹出一个新窗口

如何在新窗口中打开PHP图像链接

WPF 打开新窗口 如何设置 焦点还在原来的窗口 谢谢

双击打开一个新的winform并关闭调用者窗口

523selenium多窗口处理