我有一个应用程序,我想向用户不同的网页基础上,他们是导航。

如果浏览网页夹子,不要重定向。如果航行自动野生动物园,重定向到野生动物园。aspx。如果导航从其他地方,重新定向于不可用。aspx

我能够使用 iPhone Webapp,是否有方法检测它是怎么装?主屏幕vs野生动物园? 确定如果用户浏览网剪辑,但我有麻烦如果确定的用户导航,从移动式野生动物园在iPhone或iPod。

这里是我有什么:

if (window.navigator.standalone) {
    // user navigated from web clip, don't redirect
}
else if (/*logic for mobile Safari*/) {
    //user navigated from mobile Safari, redirect to safari page
    window.location = "safari.aspx";
}
else {
    //user navigated from some other browser, redirect to unavailable page
    window.location = "unavailable.aspx";
}
有帮助吗?

解决方案

更新:这是一个很老的答案,因为答案被接受,我不能将其删除。检查不知情的下面答案一个更好的解决方案。


您应该能够以检查“ipad公司”或“iPhone”在用户代理字符串:

var userAgent = window.navigator.userAgent;

if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)) {
   // iPad or iPhone
}
else {
   // Anything else
}

其他提示

请参阅 https://developer.chrome.com/multidevice/user-agent#chrome_for_ios_user_agent - Safari的用户代理字符串iOS和为Chrome iOS上是不方便的类似:

Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3

Safari浏览器

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3

喜欢这里的最好的方法看起来是首先检查适用于iOS的其他答案建议,然后,使Safari浏览器UA独特,我建议最好使用“是为AppleWebKit和完成的东西过滤器不CriOS “:

var ua = window.navigator.userAgent;
var iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);
var webkit = !!ua.match(/WebKit/i);
var iOSSafari = iOS && webkit && !ua.match(/CriOS/i);

最好的做法是:

function isMobileSafari() {
    return navigator.userAgent.match(/(iPod|iPhone|iPad)/) && navigator.userAgent.match(/AppleWebKit/)
}

落代码只找到移动Safari和没有别的(除了海豚等小的浏览器)

  (/(iPad|iPhone|iPod)/gi).test(userAgent) &&
  !(/CriOS/).test(userAgent) &&
  !(/FxiOS/).test(userAgent) &&
  !(/OPiOS/).test(userAgent) &&
  !(/mercury/).test(userAgent)

合并所有的答案和评论。 这是结果。

function iOSSafari(userAgent)
{
    return /iP(ad|od|hone)/i.test(userAgent) && /WebKit/i.test(userAgent) && !(/(CriOS|FxiOS|OPiOS|mercury)/i.test(userAgent));
}



var iOSSafari = /iP(ad|od|hone)/i.test(window.navigator.userAgent) && /WebKit/i.test(window.navigator.userAgent) && !(/(CriOS|FxiOS|OPiOS|mercury)/i.test(window.navigator.userAgent));

看到所有的答案,这里有一些提示关于拟议的Regex:

  • AppleWebKit 匹配的桌面Safari过(不仅是移动)
  • 没有需要呼叫 .match 超过一次这样的简单的regex,而喜欢较轻的 .test 法。
  • g (全球)regex标志是无用的同时 i (情况不敏感的)可能是有用的
  • 不需要用于捕捉(括号中),我们只是在测试的字符串

我只是使用这个因为得到的 true 对于移动铬是确定对我来说(相同的行为):

/iPhone|iPad|iPod/i.test(navigator.userAgent)

(我只是想如果检测装置为目标的一个)

实际上,没有检测移动Safari银子弹。有相当多的浏览器可以使用移动Safari浏览器的用户代理的关键字。也许你可以试试特征检测和不断更新的规则。

我upvoted @unwitting的答案,因为这不可避免地让我去。然而,在iOS的网页视图渲染我的SPA的时候,我需要调整它一下。

function is_iOS () {
    /*
        Returns whether device agent is iOS Safari
    */
    var ua = navigator.userAgent;
    var iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);
    var webkitUa = !!ua.match(/WebKit/i);

    return typeof webkit !== 'undefined' && iOS && webkit && !ua.match(/CriOS/i);
};

主要区别在于,webkitwebkitUa的重命名,从而防止与用作SPA&的UIView之间的消息处理程序的根webkit对象冲突。

function isIOS {
  var ua = window.navigator.userAgent;
  return /(iPad|iPhone|iPod).*WebKit/.test(ua) && !/(CriOS|OPiOS)/.test(ua);
}

我知道这是一个古老的线程,但我想与你们分享我的解决方案。

我需要检测时,从桌面Safari浏览器的用户导航(因为我们在2017年中期,苹果也没有给出input[type="date"] YET ...

任何支持

所以,我提出的回退定制日期选择器用于它)。但只适用于桌面Safari浏览器,因为输入型工作在Safari移动的罚款。所以,我做了这个正则表达式,只能检测到桌面的Safari浏览器。我已经测试了它,它不与歌剧,铬,Firefox或Safari浏览器的移动相匹配。

希望它可以帮助一些你们的。

if(userAgent.match(/^(?!.*chrome).(?!.*mobile).(?!.*firefox).(?!.*iPad).(?!.*iPhone).*safari.*$/i)){
  $('input[type="date"]').each(function(){
    $(this).BitmallDatePicker();
  })
}

我一直在寻找这个答案,我记得我碰到这个来之前。

在JavaScript来检测在iOS的Safari最可靠的方法是

if (window.outerWidth === 0) {
    // Code for Safari on iOS
} 

or 

if (window.outerHeight === 0) {
    // Code for Safari on iOS
} 

有关某些原因的Safari iOS上返回0为window.outerHeight属性和window.outerWidth属性。

这是在iOS的所有版本的所有iPad和iPhone。其他浏览器和装置此属性正常工作。

不知道他们打算改变这一点,但现在它工作得很好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top