1

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

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() 发生并且我只能看到空白页。但它应该将提要加载到现有模板中。

恕我直言 onDeviceOnline 功能在加载页面模板后发生,因此它无法导入提要。如果我创建这样的函数:

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

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

编辑:我使用了 Simon McDonald 的建议并创建了如下代码:function 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 时,我得到与以前相同的结果(页面布局加载,然后一切都变为空白页面)。

4

1 回答 1

2

问题是您在设备就绪事件侦听器中添加了一个“在线”事件侦听器,但设备已经在线,因此在连接发生变化之前该事件不会再次触发。在您的设备就绪事件侦听器中,您应该检查 navigator.connection.network.type 的值并确保它不是 NONE。

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

于 2012-09-19T15:12:27.360 回答