我能追踪新窗口链接的来源吗?

12

案例:

  • 网站A包含一个链接,点击后会在新窗口中打开网站B。
  • 网站B中的脚本尝试获取网站A的URL。

我的问题是:有没有办法追踪使用 target="_blank"或JavaScript window.open()函数打开的新窗口的引荐来源?

如果可以,是否有任何方法完全隐藏引荐来源?

5个回答

9

Referrer 在 HTTP 头中,因此无论窗口是否为空或新建,都将可用。您可以通过以下方式获取 URL:

console.log(document.referrer);

有些网站会使用这种方法来保护自己免受点击劫持等攻击,因此在链接页面中隐藏引荐者是不合适的。允许引荐者欺骗的浏览器被认为是不安全的,并且一旦发现就会进行修补。
更新
也许它并没有我想象中那么令人反感。HTML5有一个属性<a>可以在HTTP头中不发送引荐者:rel = "noreferrer"

5

使用window.open打开链接时,IE浏览器会丢失referer信息。可以使用jQuery或者不使用jQuery重新编写代码:

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

可以工作,但是你可能还想显式地设置 .attr("method", "GET") 以确保调用将使用 GET 作为动词执行(而不是 POST)。这只是我的个人意见。 - XDS

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);

-1

你有检查过打开者的位置吗?如果我没记错的话,这个方法对我有效。


-2

最好的方法是:

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

我希望它有用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接