我正在使用以下脚本检查设备是在线还是离线:
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/