【发布时间】:2019-12-02 22:14:16
【问题描述】:
我创建了一个 webview (BrowserComponent) 并添加了一个监听器:
BComp.addWebEventListener(BrowserComponent.onMessage, e->{
Display.getInstance().callSerially(()->{
Dialog.show("Message", (String)e.getSource(), "OK", null);
});
});
然后,在嵌入网站的 JavaScript 中,我调用了cn1PostMessage 和postMesage。这在模拟器中运行良好!但在 Android 上构建应用程序时,它什么也不做(cn1PostMessage 未定义,主程序未接收到postMessage)。
var msg = "test";
if(window.cn1PostMessage) {
window.cn1PostMessage(msg);
} else {
window.parent.postMessage(msg, '*');
// Tried: window.postMessage(msg, '*');
// Tried: window.top.postMessage(msg, '*');
}
我能做什么? 谢谢!
【问题讨论】:
-
你是在JS端调用“onLoad”后做的吗?
-
@ShaiAlmong 谢谢。不,但使用了 7 秒的 TimeOut 并在按钮按下时创建了一个动作。
cn1PostMessage未定义。但它在模拟器上运行良好。我认为这只发生在Android上。过去我使用 ReactNative 和他们的 webview,我在 Android 上遇到了同样的问题。我解决了创建如下函数的问题:send = function(message) { window.ReactNativePostMessage(message);},然后使用该函数。在这里也试过,但没有成功。 -
发布消息监听器安装在 onStart 事件中。您能否检查是否为页面调用了
onStart():b.addWebEventListener(BrowserComponent.onStart, e -> {...});如果未调用它,则可能是周围网页出现问题导致错误 -
@ShaiAlmog 试过了。
onStart事件被调用。但是window.cn1PostMessage在网页上是未定义的。该网页是一个带有脚本的空白 html 文档:window.onload = function(){ window.cn1PostMessage("test"); }。我认为Android的webview有问题。 -
@ShaiAlmog 我还尝试使用
addJSCallback注册自定义回调。它适用于模拟器,但不适用于 Android。
标签: codenameone