我正在编写一个本地插件,当键盘显示时,它会在 JavaScript 中引发一个事件。 我这样做:
appView.sendJavascript("cordova.fireWindowEvent('show_keyboard')")
在我的JavaScript代码中,我通常会做一些类似于以下的操作:
window.addEventListener('show_keyboard', handler);
然而,一位PhoneGap团队的专家将此视为大忌,这种方法有何问题?
我正在编写一个本地插件,当键盘显示时,它会在 JavaScript 中引发一个事件。 我这样做:
appView.sendJavascript("cordova.fireWindowEvent('show_keyboard')")
window.addEventListener('show_keyboard', handler);
寻找可信和/或官方来源的答案。
我也不是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
来解决问题(如上所示)。
我不是phonegap专家,但为什么不直接调用方法而不是使用监听器呢?
例如:
function keyboardShown() {
alert("test"); //or other code
}
并且
appView.sendJavascript("keyboardShown();")
通过这种方式,您可以消除通过监听器产生的开销。
如果这仍然不能满足您的PhoneGap专家,请问他会如何改进此代码。