情况如下:
我正在使用一个将用户从(SITE A)转发到移动版本(SITE B)的网站,如下所示:
<script type="text/javascript">
$(document).ready(function(){
if($(window).width() < 480){
window.location = "http://mysite.com/mobile-version"
}
});
</script>
问题是,我们仍然需要为用户提供从内部(站点B)返回(站点A)的选项,但是当该脚本到位时,它将在用户请求时再次运行脚本(站点A)和返回(SITE B)。
IF / ELSE语句是否可以拉出用户上次访问过的页面/站点并说好...您正在(站点B)访问(站点A),所以不需要重定向?
答案 0 :(得分:3)
您正在寻找的DOM属性是document.referrer。
它返回一个字符串,其中包含用户访问此页面之前所使用的页面。即。
var prevPage = document.referrer;
if (!prevPage.match(/*SITE A*/)){
//Do Something
}
答案 1 :(得分: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"
}
}
});
答案 2 :(得分:1)
Racheet的答案是正确的,尽管如此,依靠这个并不安全。某些Web浏览器可以配置为出于隐私原因而不发送REFERER标头,并且一些防火墙/路由器也会这样做。
最好的办法是,如果不存在查询字符串(或表单)参数,则只执行重定向。例如:
其他替代方案可能涉及使用cookie或localstorage,但您需要考虑用户的客户端不支持这些功能或关闭它们的可能性。
答案 3 :(得分: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"
}
});
来考虑一下:一个cookie会更实用......