我正在使用以下脚本检查设备是在线还是离线:

function checkConnection() {
    document.addEventListener("online", onDeviceOnline, false);
    document.addEventListener("offline",onDeviceOffline, false);
    function onDeviceOnline(){
        loadZive();
        loadMobil();
        loadAuto();
    };
    function onDeviceOffline(){
        alert("deviceIsOffline");
    };
};
checkConnection();


然后我有这个功能来加载提要:

function loadZive(publishedDateConverted){

    google.load("feeds", "1");
        function initialize() {
            var feed = new google.feeds.Feed("http://www.zive.sk/rss/sc-47/default.aspx");
            feed.setNumEntries(window.localStorage.getItem("entriesNumber"));
            feed.load(function(result) {
                if (!result.error) {
                    var feedlist = document.getElementById("feedZive");
                    for (var i = 0; i < result.feed.entries.length; i++) {
                        var li = document.createElement("li");
                        var entry = result.feed.entries[i];
                        var A = document.createElement("A");
                        var descriptionSettings = window.localStorage.getItem("descriptionSettings");
                        if (descriptionSettings=="true"){
                            var h3 = document.createElement("h3");
                            var p = document.createElement("p");
                            var pDate = document.createElement("p");
                            pDate.setAttribute("style","text-align: right; margin-top: 5px;");
                            var publishedDate = new Date(entry.publishedDate);
                            publishedDateConverted = convertTime(publishedDate);
                            pDate.appendChild(document.createTextNode(publishedDateConverted));
                            h3.setAttribute("style","white-space: normal;")
                            h3.appendChild(document.createTextNode(entry.title));
                            p.setAttribute("style","white-space: normal;")
                            p.appendChild(document.createTextNode(entry.content));
                            A.setAttribute("href",entry.link);
                            A.appendChild(h3);
                            A.appendChild(p);
                            A.appendChild(pDate);
                            }
                        else{
                            A.setAttribute("href",entry.link);
                            A.setAttribute("style","white-space: normal;")
                            A.appendChild(document.createTextNode(entry.title));
                        };
                        li.appendChild(A);
                        feedlist.appendChild(li);
                    }
                    $("#feedZive").listview("refresh");
                }
            });
        }
        google.setOnLoadCallback(initialize);
    };


首先,我加载第二个脚本,然后再加载。但是我什么都看不到。如果我打开我的应用程序,那么我会看到页面布局大约1秒钟,然后(可能是在加载第一个脚本之后)发生onDeviceOnline()函数,并且我只能看到空白页面。但是它应该将提要加载到现有模板中。

IMHO onDeviceOnline函数在加载页面模板后发生,因此无法导入供稿。如果我创建这样的函数:

function loadFeeds(){
    loadZive();
    loadMobil();
    loadAuto();
};


然后一切正常,所以我认为这与在线和离线事件监听器有关。当我将checkconnection放到onDeviceReady函数中时,它也没有起作用,因此应该不是问题。那么,有什么方法可以检查设备是否在线以及是否使用js文件加载提要?

编辑:我使用了西蒙·麦克唐纳的建议,并创建了这样的代码:
函数onDeviceReady(){

    document.addEventListener("backbutton", onBackKeyDown, false);
        function onBackKeyDown(){
                navigator.app.exitApp();
        }
    function checkConnection() {
        var networkState = navigator.network.connection.type;
        if (networkState == "none"){
            alert("no network connection");
        }
        else{
            loadZive();
            loadMobil();
            loadAuto();
        };
    };
    checkConnection();
};


有了此代码,警报对于设备在线和设备离线都可以正常工作,但是当我尝试loadFeed时,得到的结果与以前相同(页面布局加载,然后所有内容变为空白页面)。

最佳答案

问题是您要在设备就绪事件侦听器中添加“联机”事件侦听器,但是设备已经在线,因此直到连接发生更改后,事件才会再次触发。在设备就绪事件侦听器中,应检查navigator.connection.network.type的值,并确保其不为NONE。

http://docs.phonegap.com/en/2.0.0/cordova_connection_connection.md.html#connection.type

关于javascript - Phonegap onDeviceOnline,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12496942/

10-10 18:40