Как обнаружить iOS симулятор в JavaScript - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь определить, работает ли Safari на реальном устройстве iOS или в iOS Simulator (X Code).

Мне нужно использовать это обнаружение на веб-сайте . Кажется, это можно обнаружить в приложении для iOS, но мне действительно нужно это на веб-сайте, так что это только JavaScript / PHP.

Я попытался сравнить всю переменную navigator JS на реальном устройстве iOS и смоделированном устройстве iOS. И я не заметил никакой разницы.

Возможно, есть какая-то функция JavaScript, которая работает по-разному в iOS Simulator? Или, может быть, я могу попытаться получить доступ к некоторому датчику?

Настоящий iPad с iOS 12.3.1:

{
  "plugins": {},
  "mimeTypes": {},
  "cookieEnabled": true,
  "standalone": false,
  "geolocation": {},
  "mediaDevices": {},
  "webdriver": false,
  "appCodeName": "Mozilla",
  "appName": "Netscape",
  "appVersion": "5.0 (iPad; CPU OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Mobile/15E148 Safari/604.1",
  "platform": "iPad",
  "product": "Gecko",
  "productSub": "20030107",
  "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Mobile/15E148 Safari/604.1",
  "vendor": "Apple Computer, Inc.",
  "vendorSub": "",
  "language": "en-US",
  "languages": [
    "en-US"
  ],
  "onLine": true,
  "serviceWorker": {}
}

iOS 11.2 в симуляторе iOS:

{
  "plugins": {},
  "mimeTypes": {},
  "cookieEnabled": true,
  "standalone": false,
  "geolocation": {},
  "mediaDevices": {},
  "webdriver": false,
  "appCodeName": "Mozilla",
  "appName": "Netscape",
  "appVersion": "5.0 (iPad; CPU OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C107 Safari/604.1",
  "platform": "iPad",
  "product": "Gecko",
  "productSub": "20030107",
  "userAgent": "Mozilla/5.0 (iPad; CPU OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C107 Safari/604.1",
  "vendor": "Apple Computer, Inc.",
  "vendorSub": "",
  "language": "en-US",
  "languages": [
    "en-US"
  ],
  "onLine": true
}

Разница в приведенном выше является переменной serviceWorker, но причина в том, что она была добавлена ​​только в iOS 11.3.

Пожалуйста, дайте мне знать, если у вас есть чаевые.

1 Ответ

0 голосов
/ 21 июня 2019

Вы можете сделать как,

var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);

или

 var iOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);
...