Phonegap:“processMessage failed”无法发送 javascript 函数 (Cordova 2.5.0)

Posted

技术标签:

【中文标题】Phonegap:“processMessage failed”无法发送 javascript 函数 (Cordova 2.5.0)【英文标题】:Phonegap: "processMessage failed" unable to send javascript function (Cordova 2.5.0) 【发布时间】:2013-03-24 20:07:39 【问题描述】:

我正在尝试让 GCM 推送通知在我的应用程序中工作,因此我使用这个项目 (https://github.com/marknutter/GCM-Cordova) 作为示例。

当我运行示例代码时,一切正常,但是当我传输所有必需的文件并编辑我的代码以使其在我自己的应用程序中运行时,它不再运行。 我还尝试了以下插件(https://github.com/phonegap-build/PushPlugin),在自动安装后它给出了完全相同的错误。

应用程序没有崩溃,但是当我调用注册函数时,我的回调函数“onNotificationGCM”没有收到任何返回的消息。

注册功能:

window.plugins.GCM.register("my_gcm_id", "onNotificationGCM", successHandler, errorHandler );

经过一些调试,我发现原生 android 代码能够注册手机,并且确实从 GCM 服务器获得了 ID 消息,但它无法将其发送到我的 javascript

原生安卓代码:

public static void sendJavascript( JSONObject _json )

  String _d =  "javascript:"+gECB+"(" + _json.toString() + ")";
      Log.v(ME + ":sendJavascript", _d);

      if (gECB != null ) 
        gwebView.sendJavascript( _d );
      

LogCat 给出以下“失败”消息:

03-24 17:05:21.844: V/GCMPlugin:sendJavascript(31782): javascript:onNotificationGCM("regid":"APA91bHX...31ASD","event":"registered")

03-24 17:05:22.834: D/CordovaLog(31782): processMessage failed: Message: Jjavascript:onNotificationGCM("regid":"APA91bHX...31ASD","event":"registered")

消息前面的大写 J 很奇怪,这可能是导致问题的原因,但它似乎发生在 Cordova 2.5.0 代码的某个地方。

有人知道我该如何解决这个问题吗?

【问题讨论】:

嗨,您的问题能得到答案吗?当我从我的活动中调用 sendJavascript() 方法时,我也会收到相同的 processMessage Failed 错误。无法找出原因。这是我的帖子***.com/questions/18839876/… 【参考方案1】:

尝试添加

window.onNotificationGCM = onNotificationGCM;

更改函数的上下文

它为我解决了问题

【讨论】:

【参考方案2】:

我遇到了同样的问题。据我了解,经过一些调试后,我的字符串末尾有一个不需要的换行符“\n”,这是我不负责的,似乎电话间隙添加了该字符。所以我所做的就是.replace("\n", "")代码中Java部分的字符串。

String js = "javascript:displayTextMessage('" + date.toString() + " - " + msg.replace("\n", "") + "');" ; 发送Javascript(js);

【讨论】:

【参考方案3】:

这不是 Cordova 2.5.0 的错误!如果您从“CORDOVA_GCM_script.js”示例中复制并粘贴,您将得到如下内容:

case 'registered':
    // the definition of the e variable is json return defined in GCMReceiver.java
    // In my case on registered I have EVENT and REGID defined
    gApp.gcmregid = e.regid;
    if ( gApp.gcmregid.length > 0 )
    
      $("#app-status-ul").append('<li>REGISTERED -> REGID:' + e.regid + "</li>");


      // ==============================================================================
      // ==============================================================================
      // ==============================================================================
      //
      // This is where you would code to send the REGID to your server for this device
      //
      // ==============================================================================
      // ==============================================================================
      // ==============================================================================

    

    break

确保在脚本中声明了“gApp”数组和“gcmregedit”变量,或者不要在事件处理程序中使用它们。否则,由于之前发生过“未定义”错误,您将收到“processMessage failed”-消息。

【讨论】:

【参考方案4】:

检查您的代码是否有任何不正确的 JSON.parse ......当 JSON.parse(not_a_json_string) 发生时,这些“非法访问”等错误消息似乎被抛出。

【讨论】:

以上是关于Phonegap:“processMessage failed”无法发送 javascript 函数 (Cordova 2.5.0)的主要内容,如果未能解决你的问题,请参考以下文章

MFC中ProcessMessage()函数有啥作用?

aSmack MessageListener 的 processMessage 永远不会被调用

delphi application.processmessage

Cordova processMessage 失败:堆栈:未定义(和)错误:非法访问

QProcess 没有完成创建文件

C Builderr中如何利用消息