2010-01-27 11 views

Odpowiedz

31

Żądania sieciowe wykonane z UIWebView nie będą zawierać słowa "Safari" w ciągu znaków User Agent. Będą wysyłane żądania internetowe z Mobile Safari. Jest to najlepszy sposób, jaki znalazłem do określenia, czy żądanie pochodzi z aplikacji lub z Mobile Safari. Agencie

Próbka Użytkownik od UIWebView ciągu App:

User-Agent: Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile 

Próbka User Agent z Mobile Safari:

User-Agent: Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari 
+2

Podgląd strony internetowej na Androida wysyła nagłówek http "X-Requested-With". Samodzielna przeglądarka tego nie robi. Czy iPhone UIWebView też to robi? zobacz http://stackoverflow.com/a/15254092/90236 –

+0

Niestety ta odpowiedź kończy się niepowodzeniem w przypadku Chrome iOs. Są to UA dla Safari i Chrome. Obie zawierają "Safari" --- 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 jak Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53' --- 'Mozilla/5.0 (iPhone, CPU iPhone OS 7_1_1 jak Mac OS X) AppleWebKit/537.51.1 (KHTML, jak Gecko) CriOS/35.0.1916.38 Mobile/11D201 Safari/9537.53' –

+1

@ bfred.it Nie mam zrozumieć swój komentarz. Pytanie to nie miało nic wspólnego z odróżnianiem różnych przeglądarek mobilnych od siebie nawzajem. Tylko odróżnianie wbudowanego interfejsu UIWebView od wbudowanej przeglądarki. – Johann

11

Samodzielne Mobile Safari ciągi agenta użytkownika zawierają słowo 'Version', podczas gdy UIWebView agenta użytkownika łańcuchy nie. Tak więc skrypt wykrywania można zmodyfikować tak, aby działał z najnowszą wersją systemu iOS:

var is_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Version)/i.test(navigator.userAgent); 
+0

Dzięki za napisanie wyrażenia regularnego! – aendrew

+0

'var is_uiwebview =/((iPhone | iPod | iPad). * AppleWebKit (?!. * Wersja) |; wv) /i.test (navigator.userAgent);' wykrywa również strony internetowe z Androidem – buggedcom

Powiązane problemy