Cordova/jQuery - 识别您的应用程序是在 Web/移动浏览器还是移动应用程序 (Android/iOS) 上运行
Posted
技术标签:
【中文标题】Cordova/jQuery - 识别您的应用程序是在 Web/移动浏览器还是移动应用程序 (Android/iOS) 上运行【英文标题】:Cordova/jQuery - Identifying whether your app is being run on Web/Mobile browser or mobile app (Android/iOS) 【发布时间】:2016-10-21 12:55:57 【问题描述】:我使用 Cordova/Phonegap 为 android/ios 开发应用程序。我通常为我的网络和移动内容使用一个代码库。当它是一个移动应用程序时,我使用 SQLite 数据库和/或其他本机插件,并且当我在网络上时必须避免这些 LOC。
但我在确定我的应用是在桌面/Mac/Android/iOS 上的网络浏览器上运行还是作为移动应用 (Android/iOS) 运行时遇到问题。
我尝试过 userAgent 嗅探,但这种正则表达式技术失败了,尤其是在移动浏览器上运行代码时。以下是我用来识别设备操作系统和版本的代码:
getOSAndVersion: function()
var that = this;
var userOS; // will either be iOS, Android or unknown
var userOSver; // this is a string, used to denote OS version
var ua = navigator.userAgent;
var uaindex;
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua))
window.deviceType = "Mobile";
else
window.deviceType = "Web";
// determine OS
if (ua.match(/iPad/i) || ua.match(/iPhone/i))
userOS = 'iOS';
uaindex = ua.indexOf('OS ');
else if (ua.match(/Android/i))
userOS = 'Android';
uaindex = ua.indexOf('Android ');
else
userOS = 'unknown';
// determine version
if (userOS === 'iOS' && uaindex > -1)
userOSver = ua.substr(uaindex + 3, 3).replace('_', '.');
else if (userOS === 'Android' && uaindex > -1)
userOSver = ua.substr(uaindex + 8, 3);
else
userOSver = 'unknown';
return osVersion: userOSver, os: userOS, deviceType: window.deviceType ;
是否有任何其他技术可以用来可靠地识别我的代码在哪里运行?
附: : 我反对使用任何其他 Cordova/JS 插件来识别它,但仍然可以讨论。
【问题讨论】:
【参考方案1】:在 Cordova 中,当应用程序运行到应用程序中时,url 以 file://
为前缀,而在移动浏览器中运行时,url 以 http
或 https
协议为前缀。
解决方案:
-
获取您当前页面的 url (check this)
如果 file:// 是其应用程序,则标识其前缀
如果是 http 或 https 那么是移动浏览器
【讨论】:
@MyMasterPiece 非常感谢。在 Android 中运行良好。你能确认这是否适用于 iOS 吗? 是的,它也可以在 IOS 中运行,您也可以在任何在线模拟器中进行 chk 当我以这种方式加载实时站点时,这对我在 iO 上不起作用:<content src="http://siteurl" />
。我猜这有其局限性。【参考方案2】:
您可以检查是否定义了cordova
?
if (cordova)
// Running in your app
else
// Not running in your app, so website
【讨论】:
以上是关于Cordova/jQuery - 识别您的应用程序是在 Web/移动浏览器还是移动应用程序 (Android/iOS) 上运行的主要内容,如果未能解决你的问题,请参考以下文章