确定如果用户导航,从移动Safari
-
26-09-2019 - |
题
我有一个应用程序,我想向用户不同的网页基础上,他们是导航。
如果浏览网页夹子,不要重定向。如果航行自动野生动物园,重定向到野生动物园。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);
};
主要区别在于,webkit
到webkitUa
的重命名,从而防止与用作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。其他浏览器和装置此属性正常工作。
不知道他们打算改变这一点,但现在它工作得很好。