简体   繁体   English

流星-React-FlowRouter如何根据设备(PC或移动设备)正确重定向

[英]Meteor - React - FlowRouter how to redirect correctly based on device (PC or mobile)

I'm using Meteor, React and FlowRouter for my project, which will display differently based on PC or mobile. 我在项目中使用的是Meteor,React和FlowRouter,根据PC或移动设备的显示方式会有所不同。

Currently, my Router.js looks something like: 目前,我的Router.js如下所示:

FlowRouter.route("/login", {
  name: "login",
  action(params) {
    mount(MyMainLayout, {
      content: <MyLoginComponent />
    });
  }
})

The problem now is I want the FlowRouter to redirect itself correctly based on PC or mobile: perhaps "/login" and "/sp/login" (I mean if users access the PC url by mobile phone, they will be redirected to SP url and vice versa, when they try to access SP url on their PC, the PC route will take place, instead) 现在的问题是我希望FlowRouter能够基于PC或移动设备正确地自行重定向:也许是“ / login”和“ / sp / login”(我的意思是,如果用户通过手机访问PC网址,他们将被重定向到SP网址反之亦然,当他们尝试在其PC上访问SP url时,将使用PC路由,而相反)

Any help is appreciated, thanks! 任何帮助表示赞赏,谢谢!

I'm gonna answer my own question here because it seems that nobody has an interest in this yet: 我要在这里回答我自己的问题,因为似乎没有人对此感兴趣:

FlowRouter has its own triggersEnter feature, which will be useful here, and I will check the userAgent to determine if users access the site by their PC or mobile, then redirect them to correct landing pages. FlowRouter有其自己的triggersEnter功能,在这里将非常有用,我将检查userAgent以确定用户是通过PC还是移动设备访问该站点,然后将其重定向到正确的登录页面。

My Router.js file will look something like this: 我的Router.js文件将如下所示:

isMobile = function() {
  var check = false;
  (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
  return check; 
  // Note here that tablet will be treated as PC, too!
};

FlowRouter.route("/login", {
  name: "login_pc",
  triggersEnter: [function(context, redirect) {
    if(isMobile()){
      console.log('You are using mobile device');
      redirect('login_sp');
    }
  }],
  action(params) {
    mount(MyMainLayout, {
      content: <MyLoginComponent />
    });
  }
});

FlowRouter.route("/sp/login", {
  name: "login_sp",
  triggersEnter: [function(context, redirect) {
    if(!isMobile()){
      console.log('You are using PC');
      redirect('login_pc');
    }
  }],
  action(params) {
    mount(MyMainLayout, {
      content: <MyLoginComponentForSP />
    });
  }
});

Hope that this will be helpful for others later 希望以后对其他人有帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM