我正在研究流星移动应用程序(即时通讯使用android)。 我使用MetoerRider方法,基本上是phonegap应用程序启动,一旦应用程序完成启动它就会对流星应用程序进行ajax调用(“http://myapp.meteor.com”)
我在回复时获得了流星应用程序的DOM。
$.ajax({
url: __MeteorRiderConfig__.meteorUrl,
cache: false,
// TODO: split to method on MeteorRider
error: function( jqXHR, textStatus, errorThrown ) {
console.error("MeteorRider failure");
console.error(jqXHR, textStatus, errorThrown);
},
// TODO: split to method on MeteorRider
success: function( data, textStatus, jqXHR ) {
console.log("MeteorRider success");
console.log(textStatus);
console.log(data);
// update URLs
data = data.replace(/(href|src|manifest)\=\"\//gm, '$1="' + meteorUrl + '/');
console.log(meteorUrl);
console.log(data);
// get the original file location, not including any params
phonegapLocation = window.location.href.split('.html')[0] + '.html';
// it's stored in a param "page"
currentMeteorPath = window.location.search.replace("?", "")
if(currentMeteorPath.length > 0) {
meteorUrl += currentMeteorPath.split('page=')[1]
}
console.log("replacing state with "+meteorUrl)
window.history.replaceState({}, "", meteorUrl);
// replace the document with the new document/data
document.open();
document.write(data);
document.close();
// trigger the "loaded" events (it'd be nice to do this AFTER JS has loaded
$(document).trigger('DOMContentLoaded');
$(document).trigger('load');
$(document).trigger('complete');
}
});
}
问题是我的phonegap应用程序仅在wifi打开时工作,一旦我关闭wifi就停止工作,如果我启动我的phonegap应用程序当wifi关闭我仍然得到meteor DOM到我的phonegap应用程序但我不能做任何功能(登录/创建组等)。
所以我开始调试我的应用程序(使用build.phonegap.com中的phonegap调试), 这是我打开wifi时的日志:
if(navigator.onLine){
console.log("true")
}
else{
console.log("false")
}
日志 - > “真”
var networkState = navigator.connection.type;
var states = {};
states[Connection.UNKNOWN] = 'Unknown connection';
states[Connection.ETHERNET] = 'Ethernet connection';
states[Connection.WIFI] = 'WiFi connection';
states[Connection.CELL_2G] = 'Cell 2G connection';
states[Connection.CELL_3G] = 'Cell 3G connection';
states[Connection.CELL_4G] = 'Cell 4G connection';
states[Connection.NONE] = 'No network connection';
console.log('Connection type: ' + states[networkState]);
}
日志 - > 'WiFi连接'
Meteor.status()
日志 - >连接:是的 retryCount:0 状态:“已连接”
使用移动网络时:
if(navigator.onLine){
console.log("true")
}
else{
console.log("false")
}
日志 - > “真”
var networkState = navigator.connection.type;
var states = {};
states[Connection.UNKNOWN] = 'Unknown connection';
states[Connection.ETHERNET] = 'Ethernet connection';
states[Connection.WIFI] = 'WiFi connection';
states[Connection.CELL_2G] = 'Cell 2G connection';
states[Connection.CELL_3G] = 'Cell 3G connection';
states[Connection.CELL_4G] = 'Cell 4G connection';
states[Connection.NONE] = 'No network connection';
console.log('Connection type: ' + states[networkState]);
}
日志 - > '小区3G连接'
Meteor.status()
日志 - >连接:错误 retryCount:1 状态:“连接”
试图让Meteor.reconnect()
无法帮助而不能正常工作。
在启用wifi时Meteor.disconnect()
执行时,应用程序会断开连接,但在尝试执行Meteor.reconnect()
时它也无法正常工作。
编辑:添加离线活动
phonegapapp = {
// are we on a phonegap app?
phonegap: true,
// are we testing PhoneGap or not?
test: false,
// Application Constructor
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);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicity call 'phonegapapp.receivedEvent(...);'
onDeviceReady: function () {
document.addEventListener("offline", this.onOffline, false);
phonegapapp.receivedEvent('deviceready');
phonegapapp.receivedEvent('offline');
if (this.test) {
$('phonegapapp-test').show();
} else {
phonegapapp.meteorRider();
}
},
// Update DOM on a Received Event
receivedEvent: function (id) {
console.log('Received Event: ' + id);
},
onOffline: function () {
device.exitApp();
},
// Setup MeteorRider
meteorRider: function () {
MeteorRider.init();
}
};
更新 在另外一个流星应用程序(没有铁路由器,test.meteor.com)上测试了两部Android手机(v 4.1.2和v 4.3.3)。记录两部手机 - Meteor.status()在使用移动网络时“连接”。但是当打开/关闭wifi时,两者都失去了任何网络连接。
所以我把它缩小到两个可能的问题: 1.my meteor app做错了什么。 2.iron路由器
另一个检查另一个流星应用程序(使用铁路由器的应用程序) meteor.status()记录“已连接”。 我相信失败的原因是在我的应用程序中,我不会在我的流星应用程序中看到任何错误。
新更新: 好吧所以这真的很奇怪,我已经开始了一个新的流星应用程序只是做“流星创建测试” 添加了铁路由器和更多的软件包,如下划线jquery帐户等。 然后我把它部署到流星 - 流星部署boaz.meteor,com 提示输入密码,选择我的phonegap应用程序查看其工作是否记录为Meteor.status();并得到“虚假”和“连接”
新更新: 尝试创建一个没有任何更改的应用程序或没有添加任何包或删除任何包。 也许,Meteor.status();记录“假”和“连接”
答案 0 :(得分:1)
请注册离线活动。如果设备脱机,将触发此事件的回调。在回调函数中,关闭(终止/停止/退出)应用程序。
触发离线事件的代码:
document.addEventListener("offline", onOffline, false);
function onOffline() {
// Handle the offline event
}
退出iphone应用:navigator.device.exitApp();
退出Android的应用:device.exitApp();
这样,当连接关闭时,应用程序将关闭,并且可以再次打开。请让我知道