使用Phonegap从Java直接调用JavaScript进行函数调用

6

我正在编写一个本地插件,当键盘显示时,它会在 JavaScript 中引发一个事件。 我这样做:

appView.sendJavascript("cordova.fireWindowEvent('show_keyboard')")

在我的JavaScript代码中,我通常会做一些类似于以下的操作:
window.addEventListener('show_keyboard', handler);

然而,一位PhoneGap团队的专家将此视为大忌,这种方法有何问题?

请问您能否进一步解释最终目标是什么?我对“在JavaScript中当键盘显示时引发事件”不是100%清楚。您是否希望插件知道何时显示键盘?如果是这样,插件应该做些什么呢? - Dawson Loudon
1
“PhoneGap专家”提出了什么理由? - Whymarrh
我认为这种方法不可接受的原因是组织上的问题 - javascript与java混合在一起。最终,我将javascript回调传递给了java,这是可以接受的。 - Mark
2个回答

3

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

我也不是PhoneGap专家,但Apache Cordova驱动PhoneGap的引擎GitHub上有其源代码

源代码说了什么?

好吧,以Cordova如何发送{{link4:volumedownbutton事件}}为例。我在这里展示{{link5: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;
}

看起来,Cordova采用了类似的方法向JavaScript发送事件。

你现在所拥有的有什么问题吗?

我不确定你的同事提出的确切问题是什么,但似乎sendJavascript已被弃用。所以,就是这样。但是,如果你的appView是一个CordovaWebView,那么你可以像Cordova本身一样调用loadUrl来解决问题(如上所示)。


0

我不是phonegap专家,但为什么不直接调用方法而不是使用监听器呢?

例如:

function keyboardShown() {
    alert("test"); //or other code
}

并且

appView.sendJavascript("keyboardShown();")

通过这种方式,您可以消除通过监听器产生的开销。

如果这仍然不能满足您的PhoneGap专家,请问他会如何改进此代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接