3

情况如下:

我正在使用一个将用户从(站点 A)转发到移动版本(站点 B)的站点,如下所示:

<script type="text/javascript">
$(document).ready(function(){
if($(window).width() < 480){
window.location = "http://mysite.com/mobile-version"
}
});
</script>

问题是,我们仍然需要为用户提供从 (SITE B) 内部返回到 (SITE A) 的选项,但是有了该脚本,当用户请求 (SITE A) 并返回到 (站点 B)。

IF/ELSE 语句能否拉出用户最后访问的页面/站点并说好……您正在从(站点 B)访问(站点 A),所以不需要重定向?

4

4 回答 4

3

您要查找的 DOM 属性是document.referrer

它返回一个字符串,其中包含用户在访问此页面之前所在的页面。IE

var prevPage = document.referrer;
if (!prevPage.match(/*SITE A*/)){
//Do Something
}
于 2013-06-19T15:59:41.523 回答
1

服务器端会话最适合完整的跨浏览器支持,但如果您想在客户端执行此操作,则可以使用 HTML 5 LocalStorage,前提是移动站点和桌面站点位于同一域中。

在移动站点上,当用户点击显示桌面站点时,在 localStorage 中存储一个值:

// user wants to go to desktop site
localStorage.setItem("no-mobile-redirect", true);
window.location = 'http://desktopsite';

在桌面站点上:

$(document).ready(function(){
    if($(window).width() < 480){
        var localVar = localStorage.getItem("no-mobile-redirect");

        if(!localVar){ // only redirect if the no-mobile-redirect is not TRUE
            window.location = "http://mysite.com/mobile-version"
        }
    }
});
于 2013-06-19T16:04:26.200 回答
1

就目前而言,Racheet 的回答是正确的,但是依靠它是不安全的。出于隐私原因,可以将某些 Web 浏览器配置为不发送 REFERER 标头,并且某些防火墙/路由器也会这样做。

您最好的选择是仅在查询字符串(或表单)参数不存在时才执行重定向。例如:

其他替代方案可能涉及使用 cookie 或本地存储,但您需要再次考虑用户的客户端不支持这些功能或将它们关闭的可能性。

于 2013-06-19T16:08:06.927 回答
0

只是提供另一种解决方案。重定向到桌面时在 URL 中使用参数: http: //mysite.com ?rd=false

$(document).ready(function () {
  if (window.location.indexOf("rd=false" != -1) return;
  if($(window).width() < 480){
    window.location = "http://mysite.com/mobile-version"
  }
});

想一想:饼干会更实用……

于 2013-06-19T16:10:27.640 回答