2013-07-24 26 views
8

Cách dễ nhất để kiểm tra xem thiết bị (điện thoại thông minh) có trực tuyến hay ngoại tuyến. Tôi đang làm việc với điện thoại di động, jquery di động. Tôi tìm thấy cái này.Cách kiểm tra thiết bị là Online hoặc Offline Phonegap

document.addEventListener("online", yourCallbackFunction, false); 

Điều tôi muốn làm là kiểm tra kết nối Internet và quyết định lấy dữ liệu từ internet hoặc từ cơ sở dữ liệu cục bộ của thiết bị.

if(deviceoffline) 
    getDataFromLokalDatabase(); 
else 
    getDataFromInternet(); 

Trả lời

9

Bạn có thể sử dụng navigator.onLine:

var isOffline = 'onLine' in navigator && !navigator.onLine; 

if (isOffline) { 
    //local db 
} 
else { 
    // internet data 
} 

Nhưng hãy nhận thức được rằng nếu navigator.onLine không được hỗ trợ isOffline sẽ luôn luôn là sai

+0

OK Tôi đã thử nghiệm bình thường trên trình duyệt Chrome và chỉ nhận được thông báo sai. Nhưng tôi xây dựng các ứng dụng với phonegap và thử nghiệm nó trên điện thoại thông minh của tôi và nó hoạt động. Cảm ơn NULL. U đã giúp tôi rất nhiều :) –

+0

navigator.onLine không hoạt động đáng tin cậy, ít nhất là không có trong ứng dụng PhoneGapp của tôi (Nexus 4 với Android 5); navigator.onLine là thuộc tính được hỗ trợ. Tôi cũng tìm thấy câu hỏi liên quan này: http://stackoverflow.com/questions/14283124/navigator-online-not-always-working. –

2

Sử dụng Jquery thực hiện cuộc gọi ajax và kiểm tra mã lỗi , Nếu bạn nhận được mã lỗi là 0 thiết bị đang ngoại tuyến

$.ajax({ 
    //your ajax options 
    error: function (request) { 
     if (request.status == 0) { 
      alert("you're offline"); 
     } 
    } 
}); 
+1

Trạng thái 0 nghĩa là máy chủ không phản hồi yêu cầu. Điều đó * có thể * là vì thiết bị đang ngoại tuyến, nhưng không nhất thiết có nghĩa là thiết bị đó đang hoạt động. – Jonathan

+0

tuy nhiên - trong phần lớn các trường hợp mà bạn quan tâm là liệu ứng dụng của bạn có thể giao tiếp với máy chủ của bạn hay không ... vì vậy điều này có liên quan! – hajikelist

0

native onLine hơi run rẩy, đặc biệt là trong môi trường ứng dụng web .. nhưng có thể được sử dụng để kiểm tra ban đầu khi pageLoad, tuy nhiên nó có phần vô dụng sau đó như thể bạn đến điểm đó bạn có kết nối internet.

cố gắng điều ajax đáng tin cậy hơn nhiều.

10

Đây là mã sử dụng mã PhoneGap mẹ đẻ:

function checkInternet() { 

    var networkState = navigator.connection.type; 

    if(networkState == Connection.NONE) { 

     onConnexionError(); 
     return false; 

    } else { 

     return true; 
    } 
} 
+2

bạn cũng nên kiểm tra 'Connection.UNKNOWN' – Mirko

1

Hãy coi chừng, trong khi navigator.onLine sự là giải pháp đơn giản nhất, nó không cư xử một cách nhất quán trên tất cả các trình duyệt. Trên Chrome nó sẽ cho bạn biết rằng nó là trực tuyến nếu bạn có một cáp mạng LAN, ngay cả khi bạn không có internet.

Bạn có thể sử dụng plugin cordova network-information

Bạn cũng có thể cố gắng làm cho một yêu cầu AJAX đến máy chủ của bạn; thường bạn muốn biết nếu bạn đang ngoại tuyến vì trong trường hợp đó bạn không thể liên lạc với máy chủ, vì vậy "ngoại tuyến" thường có nghĩa là "không thể giao tiếp với máy chủ" (máy chủ của bạn cũng có thể bị ngoại tuyến). Chơi với thời gian chờ hoặc một số yêu cầu cũng hữu ích nếu bạn cần kiểm tra băng thông hoặc chất lượng liên kết.

Ngoại tuyến không có ý nghĩa như nhau đối với mọi trường hợp sử dụng, trước tiên bạn cần biết kỹ thuật nào ở trên phù hợp nhất với bạn, sau đó triển khai một hoặc một số kỹ thuật.

Điều tôi muốn làm là kiểm tra kết nối Internet và quyết định lấy dữ liệu từ internet hoặc từ cơ sở dữ liệu cục bộ của thiết bị.

Dường như việc kiểm tra liên kết với máy chủ của bạn thông qua yêu cầu là lựa chọn tốt nhất cho bạn.

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