【问题标题】:cn1PostMessage is undefined on Android. PostMessage is not workingcn1PostMessage 在 Android 上未定义。 PostMessage 不工作
【发布时间】: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 中,我调用了cn1PostMessagepostMesage。这在模拟器中运行良好!但在 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


【解决方案1】:

我刚刚尝试构建BrowserComponentPostMessageSample,它似乎在我的 Galaxy S8、Android 8 上运行良好。

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

我刚刚添加了对“android.webContentsDebuggingEnabled”显示属性的支持,这将使应用程序的网络视图可以使用Chrome's remote development tools 进行调试。这将使您更容易追踪此类问题。见usage example:

Display.getInstance().setProperty("android.webContentsDebuggingEnabled", "true");

这将在周五的更新(2019 年 12 月 6 日)中提供。

同时,我建议从BrowserComponentPostMessageSample 开始,然后对其进行修改以满足您的需求。

或者,如果你可以发布一个测试用例来证明这个问题,我可以看看它。

【讨论】:

  • 谢谢!我刚试过BrowserComponentPostMessageSample。它可以使用postMessage 向网站发送消息,但从网页内部按Send 时程序没有收到消息(对话框不出现)。使用 Android 6.0.1 手机。
  • 这很奇怪。我刚刚在 Android 6.0 设备上尝试了该示例,它运行良好。你在什么设备上测试?您的 android 设备日志中是否报告了任何错误?如果没有,您可能需要等到周五的更新来调试 javascript 并查看错误是什么。
  • 这是 Finlux 5000 Dual,Android 6.0.1,内核 3.10.49。
  • 谢谢!是的,这真的很奇怪,因为我看不到任何错误。也将在其他 Android 设备上尝试。
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
相关资源
最近更新 更多