使用Phonegap直接从java调用javascript

Mar*_*ark 6 javascript android cordova

我正在编写一个本机插件,用于在键盘显示时用JavaScript引发事件.我这样做:

appView.sendJavascript("cordova.fireWindowEvent('show_keyboard')")
Run Code Online (Sandbox Code Playgroud)

在我的JavaScript中,我做了类似的事情:

window.addEventListener('show_keyboard', handler);
Run Code Online (Sandbox Code Playgroud)

然而,这一点已经被PhoneGap专家称为PhoneGap中的一个重要的禁忌.这种方法有什么问题?

Why*_*rrh 3

寻找来自可靠和/或官方来源的答案。

好吧,我也不是 PhoneGap 专家,但是为 PhoneGap 提供支持的引擎Apache Cordova在 GitHub 上有其源代码。

消息来源怎么说?

好吧,作为一个例子,让我们看看 Cordova 如何发送它的volumedownbuttonevent。我展示了CordovaWebView.java 的第 613-621 行

if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
    this.loadUrl("javascript:cordova.fireDocumentEvent('volumedownbutton');");
    return true;
}
// If volumeup key
else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
    this.loadUrl("javascript:cordova.fireDocumentEvent('volumeupbutton');");
    return true;
}
Run Code Online (Sandbox Code Playgroud)

Cordova 似乎采用了类似的方法将事件发送到 JavaScript。

你有什么问题吗?

我不确定您的同事提出的确切问题是什么,但似乎确实已被sendJavascript弃用。所以,就是这样。但是,如果您appView是 a CordovaWebView,则可以loadUrl按照 Cordova 本身的相同方式进行调用(如上所示)。