停止无限重定向

时间:2012-07-17 19:37:59

标签: javascript jquery html

以下是我网站的.js文件的功能,该文件包含在网页的head部分test.html

function test_redirect() {
    var urlCurrent = document.URL;
    window.location = "http://webanywhere.cs.washington.edu/beta/?starting_url=" + urlCurrent;
}
$.test_redirect();

从javascript代码中可以清楚地看到,我正在尝试将打开页面 test.html 的用户重定向到另一个页面,该页面接受我正在访问的正确页面的URL查询字符串中的参数并对其执行一些操作。

重定向网页加载多次时出现问题。 重定向页面实际上打开了带有注入脚本页面的相同test.html,但重定向再次启动。

有人可以帮我找出问题所在吗?

2 个答案:

答案 0 :(得分:1)

有多种方法可以决定不对来自第三方的页面的后续加载进行重定向:

  1. 在重定向之前,设置一个时间相当短的cookie(例如1-2分钟)。如果cookie在加载时存在,请不要重定向,因为您刚刚在短时间内完成了重定向,因此此页面加载必须来自第三部分。如果cookie不存在,则执行重定向。

  2. 让第三方网站第二次加载您的页面时使用某种查询参数,您可以将其识别为由第三方网站放置在那里,这样您就知道不会重定向。例如,如果您将“?noredirect = true”(正确编码)添加到您重定向到的URL的末尾会发生什么。第三方网站会在您的网址上留下“?noredirect = true”,当您返回时,您可以检测到并避免重定向吗?

  3. 查看document.referrer,看看它是否是第三方页面。某些用户可能会将其浏览器配置为阻止引用,因此这不是100%可靠。

  4. 首次打开页面(从它来自的任何链接)指定一个查询参数,指定应该允许重定向。只有当您的页面仅链接到您控制的地点并且不会被加入书签时,这才可行。

答案 1 :(得分:1)

检查推荐人:

function test_redirect() {
    if( document.referrer.indexOf('http://webanywhere.cs.washington.edu') < 0 ){
      var urlCurrent = window.location.url;
      window.location = "http://webanywhere.cs.washington.edu/beta/?starting_url=" + urlCurrent;
    }
}
$.test_redirect();