首页 > 解决方案 > 移动重定向代码发送到错误的位置

问题描述

我试图弄清楚为什么我的代码将桌面浏览器发送到移动站点。无论我在桌面上使用什么浏览器,它都会发送到移动网站。

我也试过删除 else 语句,但不高兴,仍然是同样的问题。

如果有人能指出我的错误,我将不胜感激。非常感谢

$(document).ready(function() {
  var isMobile = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);
  if (isMobile) {
    // User-Agent is IPhone, IPod, IPad, Android or BlackBerry
    document.location.href = 'http://m.domain.co.uk';
  } else {
    document.location.href = 'https://domain.co.uk';
  }
});

标签: javascriptjquery

解决方案


实际上navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);是返回null而不是true/false

要匹配正则表达式,请创建一个RegExp对象并test()在其上使用方法。

var mobile = new RegExp(/(iPhone|iPod|iPad|Android|BlackBerry)/);
if(mobile.test(navigator.userAgent)){
  console.log("Mobile");
  // User-Agent is IPhone, IPod, IPad, Android or BlackBerry
}else{
  console.log("Desktop");
  // Any other useragent. 
}

问题str.match()是它null在未找到匹配和array of matches找到匹配时返回。所以,结果不能直接使用if/else. 您需要使用检查返回类型typeof,然后执行相应的操作。

虽然RegExp.test()很直,并true/false根据匹配与否返回。


推荐阅读