重定向后的后退按钮

时间:2014-03-06 21:33:03

标签: javascript ios cookies query-string url-redirection

这是对原始问题here的跟进。建议的答案在Firefox中有效,但至少Chrome和Safari(在iOS上)存在问题。

最初的问题是:在一个不相关的网站(比如Facebook)上,用户可以创建href格式为http // www.siteA.com /?http://www.siteB.com的链接。目的是siteA解析查询字符串并将浏览器重定向到siteB。一切正常。

然后,当用户重新定向到siteB时,单击其浏览器上的后退按钮,目标是他们应该返回到siteA而不是再次重定向。

我之前提出的问题的答案提出,在从siteA重新指示时,siteA上的代码会检查cookie - 如果不存在,则会设置并重新定向。如果它在那里,那么没有重定向。为了允许用户返回到原始引用页面并再次单击相同的链接(并重定向到siteB),还建议如果在siteA上找到cookie,并且没有重定向, cookie被删除。

在Firefox上一切正常。现在的两个问题是:

  1. 在Chrome(或许是其他人)上,Cookie删除不起作用,或仅在用户导航到其他网站后才有效。删除代码只是简单的javascript,设置过去的过期日期相同的cookie。实际上这可能是一个相对较小的问题,但找到解决方案会很好。
  2. 在iOS上的Safari上,siteA不在浏览器历史记录中。通过从历史堆栈中省略重定向页面,似乎iOS(并且可能是Safari一般),试图避免循环问题)返回到重定向到第二个站点的页面。因此,按下siteB上的后退按钮会转到重定向页面之前的页面。这是一个主要问题。
  3. 似乎有3种可能性 - 我想做的事情是不可能的,因为这是一种安全风险;没有跨浏览器/平台解决方案;或者我完全用错误的方法接近了目标。

    固定点是:

    1. URL的形式(包含第二个URL的查询字符串);
    2. 无法访问服务器(仅限javascript / jquery)。
    3. 无法控制siteB(仅限siteA)。
    4. 我对任何建议和/或建议表示感谢。

      由于

1 个答案:

答案 0 :(得分:0)

这似乎是问题2的解决方案:

$(document).ready(function() {
  var s = location.search;
   if(s != '') {
    var split = s.split('?');
     var loc = split[1].replace('?', '');
      if (document.cookie.indexOf('redirected=' + loc + '') == -1) {
           document.cookie = 'redirected=' + loc + '';
           var link = document.createElement('a');
           link.href = loc;
           document.body.appendChild(link);
           link.click();
          } else {
           document.cookie = 'redirected=' + loc + '; expires=Thu, 01 Jan 1970 00:00:00 GMT';
           var url = location.href.replace('' + s + '', '');
           location.href = '' + url + '';
          }
          } else
          {
          //do something on the re-direction page
          }
          });

这是一个有点老派,但你不是重新指导,而是在中间页面上创建一个链接并以编程方式单击它。这就像重新定向一样,但在历史堆栈中留下了重定向页面,即使在iOS上也是如此。

感谢提示上的this answer

仍然在寻找一种更有效地删除cookie的方法。

我对阅读有关这些问题的任何其他意见感兴趣并感激不尽。感谢。