2010-01-27 16 views

Trả lời

31

Yêu cầu web được thực hiện từ UIWebView sẽ không bao gồm từ "Safari" trong chuỗi Tác nhân người dùng. Yêu cầu web được thực hiện từ Mobile Safari sẽ. Đây là cách tốt nhất mà tôi đã tìm thấy để xác định yêu cầu đến từ bên trong ứng dụng hoặc từ Mobile Safari.

Mẫu User Agent từ UIWebView trong 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 

Mẫu User Agent từ 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

Chế độ xem web của Android gửi tiêu đề http "X-Requested-With". Trình duyệt đứng một mình thì không. UIWebView của iPhone có thực hiện điều này không? xem http://stackoverflow.com/a/15254092/90236 –

+0

Thật không may câu trả lời này không thành công với các iO Chrome. Đây là những UAs cho Safari và Chrome. Cả hai đều chứa "Safari" ——— 'Mozilla/5.0 (iPhone; Hệ điều hành iPhone iPhone 7_1_1 như Mac OS X) AppleWebKit/537.51.2 (KHTML, như Gecko) Phiên bản/7.0 Mobile/11D201 Safari/9537.53' ——— 'Mozilla/5.0 (iPhone; Hệ điều hành iPhone iPhone 7_1_1 như Mac OS X) AppleWebKit/537.51.1 (KHTML, như Gecko) CriOS/35.0.1916.38 Mobile/11D201 Safari/9537.53' –

+1

@ bfred.it Tôi không hiểu bình luận của bạn. Câu hỏi không liên quan gì đến việc phân biệt các trình duyệt di động khác nhau với nhau. Chỉ từ việc phân biệt UIWebView được nhúng từ trình duyệt tích hợp sẵn. – Johann

11

di động Safari chuỗi user agent độc chứa từ 'bản', trong khi user agent UIWebView chuỗi không. Do đó, tập lệnh phát hiện có thể được sửa đổi để hoạt động với phiên bản iOS mới nhất như sau:

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

Cảm ơn bạn đã viết một regex cho việc này! – aendrew

+0

'var is_uiwebview =/((iPhone | iPod | iPad). * AppleWebKit (?!. * Phiên bản) |; wv) /i.test (navigator.userAgent);' cũng phát hiện webviews android – buggedcom

Các vấn đề liên quan