2013-08-01 17 views
12

Tôi đã tự hỏi liệu có thể phát hiện xem người dùng iOS có đang sử dụng webapp hay chỉ truy cập một cách bình thường bằng trình duyệt Safari.Phát hiện nếu iOS đang sử dụng webapp

Lý do tôi muốn đạt được là trên ứng dụng web iOS khi người dùng nhấp vào liên kết, anh ấy sẽ được chuyển hướng đến trình duyệt Safari. Vì vậy, tôi đang sử dụng cách giải quyết sau đây để làm cho anh ta ở lại trong webapp (ngăn chặn việc chuyển sang trình duyệt safari).

$(document).on("click",".nav ul li a", 
     function(event){ 

     // Stop the default behavior of the browser, which 
     // is to change the URL of the page. 
     event.preventDefault(); 

     // Manually change the location of the page to stay in 
     // "Standalone" mode and change the URL at the same time. 
     location.href = $(event.target).attr("href"); 

     } 
    ); 

Nhưng tôi muốn giải pháp này chỉ xảy ra khi người dùng đang sử dụng webapp, tôi muốn nó có điều kiện cho người dùng webapp. Vì vậy, không phải trên trình duyệt Safari mặc định.

Trả lời

23

Bạn cần phải phát hiện điều này bằng cách sử dụng một số javascript:

<script> 
if (
    ("standalone" in window.navigator) &&  // Check if "standalone" property exists 
    !window.navigator.standalone    // Test if using standalone navigator 
    ){ 

    // .... code here .... 
} 
</script> 
</head> 

Như có thể tìm thấy ở đây: Determine if site is open as web app or through regular safari on ipad?

Và nguồn được sử dụng trong câu trả lời là THIS.

+2

Nice và trả lời đơn giản! Tôi đã tìm kiếm stackoverflow ofc nhưng vì một số lý do mà chủ đề không bật lên. Ngay cả khi tôi vào danh hiệu câu hỏi của tôi ... Cảm ơn! – koningdavid

+1

Và tôi sẽ chỉ cần đợi thêm 3 phút nữa;) – koningdavid

+0

@koningdavid: Rất vui được giúp bạn! –

4

iOS và Chrome WebApp cư xử khác nhau, đó là lý do tôi đến sau:

isInWebAppiOS = (window.navigator.standalone == true); 
isInWebAppChrome = (window.matchMedia('(display-mode: standalone)').matches); 
+1

Hãy cẩn thận với 'window.matchMedia ('(chế độ hiển thị: standalone)'). Khớp': nó cũng là' true' trong cửa sổ bật lên Chrome dành cho máy tính để bàn. – Antelle