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 以 httphttps 协议为前缀。

解决方案:

    获取您当前页面的 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) 上运行的主要内容,如果未能解决你的问题,请参考以下文章

Cordova - jquery 移动 img 路径

Cordova - jquery ajax 发布到服务器上的 php

添加面部跟踪和实时识别到您的Android应用程序

hp服务器换主板后如何识别阵列

jQuery 与科尔多瓦?

Win IOCP下如何识别pushback?