2014-03-06 73 views
0

這是跟我原來的問題here。答案建議在Firefox中使用,但至少Chrome和Safari(在iOS上)存在問題。重新調整後的後退按鈕

最初的問題是這樣的:在一個不相關的網站(比如Facebook)上,用戶可以創建鏈接,其中href的格式爲http // www.siteA.com /? http://www.siteB.com。目的是siteA解析查詢字符串並將瀏覽器重定向到siteB。這一切都很好。

然後,當用戶被重定向到siteB時,點擊瀏覽器上的後退按鈕,目標是他們應該返回到siteA而不是再次被重定向。

我之前提出的問題的答案是,在從siteA重定向的時候,siteA上的代碼檢查cookie - 如果它不存在,它會設置它並重定向。如果它在那裏,那麼不會重定向。爲了讓用戶能夠返回到原來的引用頁面並再次點擊相同的鏈接(並重新定向到siteB),還有人建議,如果cookie在siteA上找到,並且沒有重新定向,該cookie被刪除。

在Firefox上,所有的作品。現在的兩個問題是:Chrome瀏覽器(或其他)上的

  1. ,cookie的刪除操作不起作用,或者僅在用戶導航到其他站點後才起作用。刪除代碼只是簡單的JavaScript,過去設置與過期日期相同的cookie。這在實踐中可能是一個相對較小的問題,但找到解決方案會很好。
  2. 在iOS上的Safari上,siteA不在瀏覽器歷史記錄中。它似乎是iOS(也許是Safari一般),試圖避免循環問題)返回到重定向到第二個站點的頁面),方法是從歷史堆棧中省略重定向頁面。因此,按siteB上的後退按鈕會進入重定向頁面之前的頁面。這是一個重大問題。

看來有3種可能性 - 我想做的事情是不可能的,因爲這是一種安全風險;沒有crosss瀏覽器/平臺解決方案;或者我完全用錯誤的方法來接近目標。

固定點是:

  1. URL的形式(與含有所述第二URL查詢字符串);
  2. 無法訪問服務器(僅限於javascript/jquery)。
  3. 無法控制siteB(僅限siteA)。

我很感激任何建議和/或建議。

感謝

回答

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對SO的提示。

但仍在尋找一種更有效地移除cookie的方法。

我很感興趣並感謝您閱讀關於這些問題的任何其他意見。謝謝。