类型错误'未定义'不是对象(正在评估'navigator.connection.type'
type error 'undefined' is not an object (evaluating 'navigator.connection.type')
我正在构建一个Cordova应用程序,在其中我使用Cordova网络信息插件org.apache.Cordova.network-information。过去几天,我在safari中调试时,在web检查器中遇到了这个奇怪的错误,其中说"typeerror‘undefined’不是对象(正在评估‘navigator.connection.type’)"。在初始加载期间,它运行良好,但在进一步导航时在应用程序中显示此错误并冻结应用程序。在iOS 8中,它经常出现,但在Android棒棒糖中,它偶尔会出现。我已经尝试了所有关于这方面的建议或帖子,但没有任何结果。我使用的是Cordova版本4.3,iOS 8.1。非常感谢任何帮助抱歉无法发布任何关于此的图片,因为我没有足够的声誉来发布
function checkConnection() {
alert(navigator.connection.type);
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.CELL] = 'Cell generic connection';
states[Connection.NONE] = 'No network connection';
if(networkState == Connection.UNKNOWN || networkState == Connection.NONE){
navigator.notification.alert('No Network Available',null,"Warning");
sessionStorage.setItem('UserID',"");
$.mobile.changePage("#loginPage", {
transition: 'none',
showLoadMsg: true
});
return false;
}else{
return true;
}
}
在我的例子中,问题是我调用了device ready
之外的函数所以这样做解决了我的问题:
document.addEventListener("deviceready", function(){
// do your navigator.connection.type stuff here
}, false);
检查您是否已声明这些
<feature name="NetworkStatus">
<param name="android-package" value="CDVConnection" />
</feature>
网络状态将是功能名称,值将是您的类名。
在Android Manifest中,
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
华硕检查cordova_plugin.js
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [{
"file": "plugins/org.apache.cordova.dialogs/www/notification.js",
"id": "org.apache.cordova.dialogs.notification",
"merges": ["navigator.notification"]
}, {
"file": "plugins/org.apache.cordova.network-information/www/network.js",
"id": "org.apache.cordova.network-information.network",
"clobbers": ["navigator.connection", "navigator.network.connection"]
}];
module.exports.metadata = // TOP OF METADATA
{
"org.apache.cordova.device": "0.2.8",
"org.apache.cordova.network-information": "0.2.7"
}
});
我在使用cordova插件网络信息时遇到了同样的问题。我注意到,尽管在"deviceready"被激发后被调用,navigator.connection.type对象仍然未定义。我的解决方法是将调用延迟200ms,之后对象就可以使用了。
function checkConnection(){
try{
console.log(navigator.connection.type);
}
catch(e){
alert("error : "+e);
}
setTimeout(function(){
var networkState = navigator.connection.type;
console.log(networkState);
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.CELL] = 'Cell generic connection';
states[Connection.NONE] = 'No network connection';
// alert('Connection type: ' + states[networkState]);
if(states[networkState] == "No network connection"){
window.location.assign("lostConnection.html");
}
}, 200);
}
因此,"try/catch"序列将因未定义的对象而失败,但200毫秒后,对navigator.connection.type的调用成功了,对我来说还好!
相关文章:
- chrome扩展中的navigator.geolocation.getCurrentPosition
- 使用正则表达式评估电子邮件地址时出现性能问题
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- 使用(navigator.geolocation)检测浏览器功能错误
- 如何检查链接是否有文本,并根据文本值评估条件-Jquery/JS
- 在百度地图中显示navigator.geolocation.getCurrentPosition
- 类型错误'未定义'不是对象(正在评估'navigator.connection.type'
- 使用navigator.getUserMedia(Javascript)访问移动麦克风
- 下载javascript文件,但不要立即对其进行评估
- 在WebView iOS中评估Javascript
- TypeError:undefined不是对象(正在评估'newWindow.focus')
- r.js评估'text'插件,尽管在'stubModules'参数
- 在React Native+Redux中使用Navigator
- 避免重新评估和动态卸载用“require”调用的对象
- 删除评估值Javascript时的错误
- 咖啡脚本意外的条件评估
- Javascript-在一行中评估多个正则表达式
- &&评估问题
- 在JavaScript中评估复杂的数学表达式
- JavaScript:获取对象的评估属性