gpt4 book ai didi

ios - iOS 上的 PhoneGap 网络信息插件问题

转载 作者:可可西里 更新时间:2023-11-01 04:41:08 26 4
gpt4 key购买 nike

我正在开发 PhoneGap 应用程序,在安装一个特定模块“网络信息”( https://github.com/apache/cordova-plugin-network-information ) 时遇到问题。 phonegap -v 显示我正在运行 5.3.7 版本

所有其他插件似乎工作正常。这是我正在处理的应用程序中的一个问题,但我也设法在新应用程序中重现了它:我更改的唯一两个文件是 index.html 和 js/index.js 在这个例子中,还有没有 js/cordova.js 文件,自动包含 ( Cordova Network and Camera API returns undefined )

我使用以下命令创建了该应用:

phonegap create ios-test
cd ios-test
phonegap cordova plugin add cordova-plugin-dialogs
phonegap cordova plugin add cordova-plugin-network-information

phonegap cordova 插件列表的输出是:

cordova-plugin-dialogs 1.1.1 "Notification"
cordova-plugin-network-information 1.0.1 "Network Information"

基于建议 here我已将其包装在 setTimeout() 调用中,但这似乎没有什么不同。

这是 HTML (index.html):

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<title>Hello World</title>
</head>
<body>
<div class="app">
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript">
app.initialize();
</script>
</body>
</html>

还有 JS:

var app = {
initialize: function() {
this.bindEvents();
},

bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},

onDeviceReady: function() {
navigator.notification.alert('Test', null, 'Test', 'OK');

setTimeout(function() {
navigator.notification.alert('Debug', null, 'Checking connection', 'OK');

if (navigator.connection == undefined) {
navigator.notification.alert('navigator.connection is undefined', null, 'Error', 'OK');
return;
}

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';

navigator.notification.alert('Network Status', null, 'Connection type: ' + states[networkState], 'OK');
}, 5000);
}
};

在我的 iPhone 上使用 phonegap serve 和 Developer 应用程序运行代码时,我收到调试警报,然后看到“navigator.connection is undefined”。


我也尝试过为 iOS 构建:

phonegap platform add ios

Adding ios project...
Running command: /Users/James/.cordova/lib/npm_cache/cordova-ios/3.9.2/package/bin/create /Web/ios-test/platforms/ios com.phonegap.helloworld "Hello World" --cli
iOS project created with cordova-ios@3.9.2
Discovered plugin "cordova-plugin-whitelist" in config.xml. Installing to the project
Fetching plugin "cordova-plugin-whitelist@1" via npm
Installing "cordova-plugin-whitelist" for ios
Installing "cordova-plugin-dialogs" for ios
Installing "cordova-plugin-network-information" for ios

这会创建一个 platforms/ios 文件夹,但我仍然遇到同样的问题。


我也试过:

<feature name="NetworkStatus">
<param name="ios-package" value="CDVConnection" />
</feature>

最佳答案

您没有正确使用 this 上下文。这是一个常见的错误。 Javascript this 不像 Java this 那样工作。

它不起作用的原因是 this运行时 得到解析,而不是汇编时(或编译时)。当事件触发时,this 解析为全局 this,因为您的 app 对象现在超出范围。该事件在您的 app 对象的*外部*触发。

一个快速解决方法是使用 app.onDeviceReady 而不是 this.onDeviceReady 你可以通过让你的onDeviceReady 来测试它() 一个全局函数并保留 this

OHH,setTimeout() 的回答是不知道他们需要等待 deviceready 事件的人。在 Javascript 世界中,糟糕的代码和糟糕的建议比比皆是。

这些视频应该有所帮助。 – 祝你好运。

关于ios - iOS 上的 PhoneGap 网络信息插件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33647478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com