Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有processMessage的应用程序无限循环失败错误_Javascript_Cordova - Fatal编程技术网

Javascript 带有processMessage的应用程序无限循环失败错误

Javascript 带有processMessage的应用程序无限循环失败错误,javascript,cordova,Javascript,Cordova,我的Cordova应用程序未在浏览器和移动设备中运行它显示错误 processMessage失败 屏幕截图: 然后无限循环,它冻结了设备,有解决方案吗 这个问题已经在这里问过了,但没有答案,所以我不得不再次问。检查您的cordova js加载是否正确?cordova js的路径是否正确 在index.html中提供如下路径: <script type="text/javascript" src="cordova.js"> 遇到同样的问题(在phonegap桌面仿真器中使用Chr

我的Cordova应用程序未在浏览器和移动设备中运行它显示错误

processMessage失败

屏幕截图:

然后无限循环,它冻结了设备,有解决方案吗


这个问题已经在这里问过了,但没有答案,所以我不得不再次问。

检查您的cordova js加载是否正确?cordova js的路径是否正确

在index.html中提供如下路径:

<script type="text/javascript" src="cordova.js">

遇到同样的问题(在phonegap桌面仿真器中使用Chrome)。我看到的情况是这样的

Cordova.js中似乎存在无法检查空消息的错误。 当应用程序发出警报时: 初始间隙:2 间隙:[0,“状态栏”,“准备就绪”,“状态栏1593157203”] 差距:[0,“应用程序”,“显示”,“应用程序1593157204”] 间隙:[0,“文件”,“请求所有路径”,“文件1593157205”] 差距:[0,“网络状态”、“getConnectionInfo”、“网络状态1593157206”] 间隙:[0,“设备”、“获取设备信息”、“设备1593157207”]

你只是点击“OK”,而不是清除对话框中的内容,这会导致无限的Looooooop。我不知道这些消息的意义是的,因为我对Cordova很陌生,但这是地狱,不符合最小惊喜原则

因此,您可以清除消息,或者修改cordova.js代码,使其卡在循环中。您还可以关闭同样有效的警报

函数processMessage()(请参见下文)不测试空字符串,空字符串本身可能没有问题,但它是从while循环调用的,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 < bytes.length; i++) {
                        arraybuffer[i] = bytes.charCodeAt(i);
                    }
                    payload = arraybuffer.buffer;
                } else if (payloadKind == 'S') {
                    payload = window.atob(message.slice(nextSpaceIdx + 2));
                } else {
                    payload = JSON.parse(message.slice(nextSpaceIdx + 1));
                }
                cordova.callbackFromNative(callbackId, success, status, [payload], keepCallback);
            } else {
                console.log("processMessage failed: invalid message: " + JSON.stringify(message));
            }
        } catch (e) {
            console.log("processMessage failed: Error: " + e);
            console.log("processMessage failed: Stack: " + e.stack);
            console.log("processMessage failed: Message: " + message);
        }
    }
while(messagesFromNative.length){
var msg=popMessageFromQueue();
//Java端可以发送一条*消息来表示
//仍有消息等待检索。
if(msg='*'&&messagesFromNative.length==0){
setTimeout(pollOnce,0);
返回;
}
处理消息(msg);
}
//处理由NativeToJsMessageQueue.java编码的单个消息。
函数processMessage(消息){
试一试{
var firstChar=message.charAt(0);
如果(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有效载荷;
如果(payloadKind=='s'){
有效负载=message.slice(nextSpaceIdx+2);
}else if(payloadKind=='t'){
有效载荷=真;
}else if(payloadKind=='f'){
有效载荷=假;
}否则如果(payloadKind='N'){
有效载荷=零;
}否则如果(payloadKind='n'){
有效负载=+message.slice(nextSpaceIdx+2);
}否则如果(payloadKind=='A'){
var data=message.slice(nextSpaceIdx+2);
var bytes=window.atob(数据);
var arraybuffer=新的Uint8Array(bytes.length);
对于(变量i=0;i
我在Angular 6项目中遇到了这个问题。只需删除src文件夹下的cordova.js就可以解决这个问题。

我在查看
cordova service
/android
平台选项时无法解决这个问题;但是,
/ios
平台选项确实起作用对


这不是一个很好的解决方案,但可能对后续人员有一定帮助。

我已经在index.html中添加了cordova.js文件,但当我删除它时,浏览器中的工作正常,然后在制作应用程序时检查你的www文件夹中是否有cordova.js文件?你可以在tomat服务器中托管你的应用程序,然后你就不必删除cordova js reference了我认为tomcat是服务器,它的for java权限tomcat不是服务器如果cordova没有加载,他就不会收到错误消息。如何关闭警报?只需将
=+提示符(''''''''')
替换为
='';/+提示符('''''''''''')
P.S.使用
subl.
在sublime中打开目录,然后使用
Ctrl+Shift+F
查找并替换所有提示。