作者:云聪京初瑞子_617 | 来源:互联网 | 2023-05-21 18:59
我的Cordova应用程序没有在浏览器和移动设备上运行它显示错误
processMessage失败
截图:
并进入无限循环并冻结设备任何解决方案?
这个问题已经在这里被问到Cordova没有正常运行,但没有答案,所以这就是为什么我要再次问它.
1> James Flemin..:
得到同样的问题(使用Chrome和phonegap桌面模拟器.我看到的情况就是这样.
Cordova.js中似乎有一个错误,无法检查空消息.当应用程序发出警报时:gap_init:2 gap:[0,"StatusBar","_ ready","StatusBar1593157203"]缺口:[0,"App","show","App1593157204"]缺口:[0,"文件","requestAllPaths","File1593157205"]缺口:[0,"NetworkStatus","getConnectionInfo","NetworkStatus1593157206"]缺口:[0,"设备","getDeviceInfo","Device1593157207"]
然后你只需点击'确定',而不是清除它进入的对话框的内容,导致无限的loooooop.我不知道这些消息的重要性是的,因为我对科尔多瓦来说还是新手,但这是地狱般的,并且最不让人惊讶!
因此,您可以清除消息,或修改cordova.js代码,使其陷入循环中.您也可以关闭同样有效的警报.
函数processMessage()(见下文)不测试一个空字符串,它本身可能没什么问题,但它是从一个while循环中调用的,它只检查"*"是否会弹出.
while (messagesFromNative.length) {
var msg = popMessageFromQueue();
// The Java side can send a * message to indicate that it
// still has messages waiting to be retrieved.
if (msg == '*' && messagesFromNative.length === 0) {
setTimeout(pollOnce, 0);
return;
}
processMessage(msg);
}
// Processes a single message, as encoded by NativeToJsMessageQueue.java.
function processMessage(message) {
try {
var firstChar = message.charAt(0);
if (firstChar == 'J') {
eval(message.slice(1));
} else if (firstChar == 'S' || firstChar == 'F') {
var success = firstChar == 'S';
var keepCallback = message.charAt(1) == '1';
var spaceIdx = message.indexOf(' ', 2);
var status = +message.slice(2, spaceIdx);
var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1);
var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx);
var payloadKind = message.charAt(nextSpaceIdx + 1);
var payload;
if (payloadKind == 's') {
payload = message.slice(nextSpaceIdx + 2);
} else if (payloadKind == 't') {
payload = true;
} else if (payloadKind == 'f') {
payload = false;
} else if (payloadKind == 'N') {
payload = null;
} else if (payloadKind == 'n') {
payload = +message.slice(nextSpaceIdx + 2);
} else if (payloadKind == 'A') {
var data = message.slice(nextSpaceIdx + 2);
var bytes = window.atob(data);
var arraybuffer = new Uint8Array(bytes.length);
for (var i = 0; i