2016-06-20 12 views
0

Ich entwickle Apps für Android/iOS mit Cordova/Phonegap. Ich verwende generell eine einzige Codebasis für meine Web- und mobilen Inhalte. Ich verwende eine SQLite-Datenbank und/oder andere native Plugins, wenn es sich um eine mobile App handelt, und muss diese LOCs vermeiden, wenn ich im Web bin.Cordova/jQuery - Identifizieren, ob Ihre App im Web/Mobile Browser oder in der mobilen App (Android/iOS) ausgeführt wird

Aber ich habe ein Problem mit der Identifizierung, ob meine App in einem Webbrowser auf Desktop/Mac/Android/iOS oder als mobile App (Android/iOS) ausgeführt wird.

Ich habe versucht, UserAgent Sniffing, aber diese Regex-Technik schlägt vor allem bei der Ausführung des Codes in mobilen Browsern. Im Folgenden ist der Code, den ich verwenden OS und Version des Geräts zu identifizieren:

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 }; 
    } 

Gibt es eine andere Technik, die ich zuverlässig verwenden kann, um festzustellen, wo mein Code ausgeführt wird?

P.S. : Ich bin abgeneigt, jedes andere Cordova/JS-Plugin zu verwenden, um es zu identifizieren, aber immer noch zur Diskussion offen.

Antwort

1

In Cordoba, wenn App in App läuft die URL file:// Präfix vorangestellt und wenn im mobilen Browser ausgeführt wird die URL http oder https protokal vorangestellt.

Lösung:

  1. URL erhalten von Ihnen aktuelle Seite (check this)
  2. identifizieren sein Präfix wenn file: // der seine App
  3. Wenn http oder https dann mobilen Browser
+0

gute Idee ... Lemme versuchen und zurück zu Ihnen –

+1

@AnujBatwe diese Lösung funktioniert, ich habe es versucht – KOTIOS

+0

@MyMasterPiece Dank viel. Arbeitete großartig in Android. kannst du bestätigen, ob das in iOS funktioniert? –

0

Sie könnten einfach überprüfen, ob cordova definiert ist?

if (cordova) { 
    // Running in your app 
} else { 
    // Not running in your app, so website 
} 
+0

Das hat in meinem Test nicht funktioniert. Scheint so, als müsste es ... – Jake