使用 javascript 检测重定向 - 如何?

Posted

技术标签:

【中文标题】使用 javascript 检测重定向 - 如何?【英文标题】:detecting a redirect with javascript - how? 【发布时间】:2012-03-27 04:07:02 【问题描述】:

有什么方法可以检测一个网页是否会在知道其 URL 的情况下将我重定向到另一个网页?我的意思是当您在文本字段中键入 URL 并且脚本会检查它的 3xx 重定向时的情况。

【问题讨论】:

有一个事件onbeforeunload,是你想要的吗? @fardjad 也许我没有正确解释。我需要 this 之类的东西,但使用 javascript,而不是 php 如果它符合同源策略,您应该可以通过 XHR 对象获取 302 标头。 也许您可以使用 iframe... 在 iframe 中加载该 url 并比较其位置。虽然您可能需要解决跨域问题。 【参考方案1】:

是的,您可以在 Javascript 中轻松做到这一点。它看起来像:

var xhr = new XMLHttpRequest();
xhr.onload = function() 
  if (this.status < 400 && this.status >= 300) 
    alert('this redirects to ' + this.getResponseHeader("Location"));
   else 
    alert('doesn\'t redirect ');
  

xhr.open('HEAD', '/my/location', true);
xhr.send();

不幸的是,这仅适用于您自己的服务器,除非您访问设置了CORS 的服务器。如果您想在任何域中统一工作,则必须在服务器端进行。

【讨论】:

我在这里可能错了,但我认为这可能不起作用,检查您是否被重定向的唯一方法是检查 responseURL 属性 xhr.spec.whatwg.org/#the-responseurl-attribute 如果是与 open 方法中使用的 URL 不同,存在重定向【参考方案2】:

这是您问题的简单解决方案。

x.addEventListener('readystatechange',function()

    const url = 'https://your/request/url';
    if(this.responseURL != url)
        alert('redirected');
    

);

【讨论】:

以上是关于使用 javascript 检测重定向 - 如何?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript/jquery:如何检测在其他窗口或应用链接中加载的页面?

如何检测初始页面加载是不是来自重定向

如何在 PHP 中检测、删除和重定向带有 # 的 URL?

如何在 Django 视图中检测重定向

如何使用Javascript通过'POST'方法重定向?

如何在 UIWebView 中检测重定向