简体   繁体   English

Phonegap活动在线/离线无效

[英]Phonegap events online/offline not working

I am writing app with phonegap(cordova) 3.0.0 and events "online" and "offline" doesn't work. 我正在使用phonegap(cordova)3.0.0编写应用程序,“在线”和“离线”事件不起作用。 When I tried event "resume", this event was OK. 当我尝试“恢复”事件时,此事件没问题。 I am using XCode 4.5 and IOS. 我正在使用XCode 4.5和IOS。

This is my main javascript file of phonegap project: 这是我的phonegap项目的主要javascript文件:

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 for advices 谢谢你的建议

if you want to display online / offline status you need to add network-information plugin first with command prompt 如果要显示在线/离线状态,则需要首先使用命令提示符添加网络信息插件

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

after adding that plugin your online / offline event should work, it work fine for me 添加该插件后,您的在线/离线活动应该可以正常工作,它对我来说很好

These events has to be bind inside "onDeviceReady", they will not work before the DeviceReady event. 这些事件必须绑定在“onDeviceReady”中,它们在DeviceReady事件之前不起作用。 Check this Attach an event listener once the deviceready event fires 选中此项在deviceready事件触发后附加事件侦听器

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);
},

Please note that online/offline event is not fired when the app starts, these event only get fired when connectivity state changes. 请注意,应用程序启动时不会触发在线/离线事件,这些事件仅在连接状态更改时触发。 Let say when app starts in online mode, until it goes offline, offline event will not be triggered, same for online event. 假设当应用程序以在线模式启动时,直到它脱机,将不会触发离线事件,对于在线事件也是如此。

To check the current connectivity, you need to use the below code 要检查当前连接,您需要使用以下代码

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();
    }
}

在corodova(而不是phonegap)中,您必须以这种方式添加插件:
cordova plugin add org.apache.cordova.network-information

you should add Connection plugin to your project and then this events will be fired. 您应该将Connection插件添加到项目中,然后将触发此事件。

to add Connection plugin use following command: 添加Connection插件使用以下命令:

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

In the phonegap folder project: 在phonegap文件夹项目中:

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

In index.js : index.js

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

In index.html , somewhere : index.html ,某处:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM