2013-08-10 48 views
6

Tôi đang viết ứng dụng với phonegap (cordova) 3.0.0 và các sự kiện "trực tuyến" và "ngoại tuyến" không hoạt động. Khi tôi thử sự kiện "tiếp tục", sự kiện này là OK. Tôi đang sử dụng XCode 4.5 và IOS.Sự kiện Phonegap trực tuyến/ngoại tuyến không hoạt động

Đây là chính tập tin javascript của tôi về dự án PhoneGap:

var app = { 

    initialize: function() { 
     this.bindEvents(); 
    }, 
    // Bind Event Listeners 
    // 
    // Bind any events that are required on startup. Common events are: 
    // 'load', 'deviceready', 'offline', and 'online'. 
    bindEvents: function() { 
     document.addEventListener('deviceready', this.onDeviceReady, false); 
     document.addEventListener('online', this.onDeviceOnline, false); 
     document.addEventListener('resume', this.onDeviceResume, false); 
    }, 

    onDeviceReady: function() { 
     app.receivedEvent('deviceready'); 
    }, 

    onDeviceOnline: function() { 
     app.receivedEvent('deviceonline'); 
    }, 

    onDeviceResume: function() { 
     app.receivedEvent('deviceresume'); 
    }, 

    receivedEvent: function(id) { 
     var parentElement = document.getElementById(id); 
     var listeningElement = parentElement.querySelector('.listening'); 
     var receivedElement = parentElement.querySelector('.received'); 

     listeningElement.setAttribute('style', 'display:none;'); 
     receivedElement.setAttribute('style', 'display:block;'); 

     console.log('Received Event: ' + id); 
    } 
}; 

Thank cho lời khuyên

Trả lời

2

Những sự kiện này phải được ràng buộc bên trong "onDeviceReady", họ sẽ không làm việc trước khi sự kiện DeviceReady. Kiểm tra này Attach an event listener once the deviceready event fires

bindEvents: function() { 
    document.addEventListener('deviceready', this.onDeviceReady, false); 
    document.addEventListener('resume', this.onDeviceResume, false); 
}, 

onDeviceReady: function() { 
    app.receivedEvent('deviceready'); 
    document.addEventListener('online', this.onDeviceOnline, false); 
}, 

Xin lưu ý rằng sự kiện online/offline không phát sinh khi ứng dụng khởi động, những sự kiện chỉ được kích hoạt khi kết nối thay đổi trạng thái. Giả sử khi ứng dụng bắt đầu ở chế độ trực tuyến, cho đến khi ứng dụng ngoại tuyến, sự kiện ngoại tuyến sẽ không được kích hoạt, tương tự cho sự kiện trực tuyến.

Để kiểm tra các kết nối hiện tại, bạn cần phải sử dụng mã dưới đây

onDeviceReady: function() { 
    app.receivedEvent('deviceready'); 
    document.addEventListener('online', this.onDeviceOnline, false); 
    if((navigator.network.connection.type).toUpperCase() != "NONE" && 
     (navigator.network.connection.type).toUpperCase() != "UNKNOWN") { 
     this.onDeviceOnline(); 
    } 
} 
+1

Tôi đã thử nó, nhưng vẫn không làm việc . Chỉ tiếp tục, hoặc tạm dừng là ok. – user2374693

+2

Bạn kiểm tra các sự kiện như thế nào? Những sự kiện này sẽ không kích hoạt khi ứng dụng bắt đầu, nó chỉ kích hoạt khi trạng thái kết nối thay đổi, tức là ứng dụng đang trực tuyến, khi bắt đầu và khi hệ thống ngoại tuyến, sự kiện ngoại tuyến được kích hoạt và ngược lại. Nếu bạn cần kiểm tra trạng thái kết nối hiện tại, vui lòng xem câu trả lời được cập nhật. –

+0

Để tham khảo trong tương lai; Kể từ khi mạng "phonegap 3.0" biến mất. Nó bây giờ là "navigator.connection.type". Xem tài liệu để biết thêm thông tin: http://docs.phonegap.com/en/edge/cordova_connection_connection.md.html – NoobishPro

0

bạn nên thêm Plugin Kết nối với dự án của bạn và sau đó sự kiện này sẽ bị sa thải.

để thêm kết nối sử dụng Plugin lệnh sau:

CMD> phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git 
8

nếu bạn muốn hiển thị trạng thái online/offline bạn cần phải thêm mạng thông tin cắm đầu với dấu nhắc lệnh

$ phonegap local plugin add org.apache.cordova.network-information 

sau khi thêm rằng plugin sự kiện trực tuyến/ngoại tuyến của bạn sẽ hoạt động, nó hoạt động tốt cho tôi

+1

Để sử dụng Cordova: cordova plugin thêm org.apache.cordova.mạng thông tin –

+0

hoạt động tốt nhưng nó ném sự kiện ngoại tuyến hai lần – Abhishek

2

Trong corodova (không phải điện thoại) bạn phải thêm plugin theo cách này:
cordova plugin add org.apache.cordova.network-information

0

Trong dự án thư mục PhoneGap:

phonegap plugin add org.apache.cordova.network-information 

Trong index.js:

var app = {}; 
app.initialize = function() { 
    document.addEventListener("online", function(){alert('online : true') }, false); 
    document.addEventListener("offline", function(){alert('online : false') }, false); 
}; 

Trong index.html, ở đâu đó:

<script type="text/javascript"> 
app.initialize(); 
</script> 
+0

tại sao cách này kích hoạt chức năng hai lần trên trạng thái Ngoại tuyến hoặc Trực tuyến của Thiết bị? –

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