Codenameone cn1PostMessage在Android上未定义。PostMessage不起作用

Codenameone cn1PostMessage在Android上未定义。PostMessage不起作用,codenameone,Codenameone,我创建了一个webview(BrowserComponent)并添加了一个侦听器: BComp.addWebEventListener(BrowserComponent.onMessage, e->{ Display.getInstance().callSerially(()->{ Dialog.show("Message", (String)e.getSource(), "OK", null); }); }); 然后,在嵌入式网站的JavaScript中,我调用了

我创建了一个webview(BrowserComponent)并添加了一个侦听器:

BComp.addWebEventListener(BrowserComponent.onMessage, e->{
  Display.getInstance().callSerially(()->{
    Dialog.show("Message", (String)e.getSource(), "OK", null);
  });
});
然后,在嵌入式网站的JavaScript中,我调用了
cn1PostMessage
postmessage
。这在模拟器中运行良好!但在Android上构建应用程序时,它什么也不做(
cn1PostMessage
未定义,主程序未接收到
postMessage

我能做什么? 谢谢

我刚刚试着构建了一个,它似乎在我的Galaxy S8和Android 8上运行得很好

如果发现
window.cn1PostMessage
未定义,则可能是页面加载中存在javascript错误,导致无法安装回调,或者是代码在CodenameOne初始化代码运行之前运行

我刚刚添加了对“android.webcontentsdebuggingsenabled”显示属性的支持,这将使应用程序的web视图可以使用进行调试。这将使您更容易跟踪此类问题。见:

这将在周五的更新(12月6日/19日)中提供

同时,我建议从开始,然后修改它以满足您的需要


或者,如果您可以发布一个测试用例来演示这个问题,我可以看看。

您是在JS端调用“onLoad”之后做的吗?@ShaiAlmong谢谢。否,但使用了7秒的超时,并在按下按钮时创建了一个操作<代码>cn1PostMessage未定义。但它在模拟器上运行良好。我认为这只会发生在Android上。在过去,我使用ReactNative和他们的webview,我在Android上也遇到了同样的问题。我解决了创建如下函数的问题:
send=function(message){window.reactivepostmessage(message);}
,然后使用该函数。此处也尝试过,但未成功。post message侦听器已安装在onStart事件中。您是否可以检查是否为页面调用了
b.addWebEventListener(BrowserComponent.onStart,e->{…})如果未调用它,则可能是由于周围网页存在问题而导致错误error@ShaiAlmog试过了<代码>启动
事件被调用。但是网页上未定义
window.cn1PostMessage
。该网页是一个空白html文档,其脚本为:
window.onload=function(){window.cn1PostMessage(“test”);}
。我认为Android的webview有问题。@ShaiAlmog我还尝试使用
addJSCallback
注册自定义回调。它可以在模拟器上运行,但不能在Android上运行。谢谢!我刚刚尝试了
浏览器组件PostMessageSample
。它可以使用
postMessage
向网站发送消息,但在网页内部按
send
时,程序不会收到任何消息(对话框不会出现)。使用安卓6.0.1手机,真奇怪。我刚刚在安卓6.0设备上试过这个例子,效果很好。你在测试什么设备?您的android设备日志中是否报告了任何错误?如果没有,您可能需要等到周五的更新来调试javascript,并查看错误是什么。这是一个Finlux 5000 Dual,Android 6.0.1,内核3.10.49。谢谢!是的,这真的很奇怪,因为我看不到任何错误。也将在其他安卓设备上试用。
var msg = "test";

if(window.cn1PostMessage) {
    window.cn1PostMessage(msg);
} else {
    window.parent.postMessage(msg, '*');
    // Tried: window.postMessage(msg, '*');
    // Tried: window.top.postMessage(msg, '*');
}
Display.getInstance().setProperty("android.webContentsDebuggingEnabled", "true");