Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Phonegap直接从java调用javascript_Javascript_Android_Cordova - Fatal编程技术网

使用Phonegap直接从java调用javascript

使用Phonegap直接从java调用javascript,javascript,android,cordova,Javascript,Android,Cordova,我正在编写一个本机插件,在显示键盘时用JavaScript引发一个事件。我这样做: appView.sendJavascript("cordova.fireWindowEvent('show_keyboard')") 在我的JavaScript中,我会执行以下操作: window.addEventListener('show_keyboard', handler); 然而,团队中的一位PhoneGap专家将此标记为PhoneGap中的一个大禁忌。这种方法有什么问题?我不是phonegap专家

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

appView.sendJavascript("cordova.fireWindowEvent('show_keyboard')")
在我的JavaScript中,我会执行以下操作:

window.addEventListener('show_keyboard', handler);

然而,团队中的一位PhoneGap专家将此标记为PhoneGap中的一个大禁忌。这种方法有什么问题?

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

比如说

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

通过这种方式,您可以消除侦听器带来的开销

如果这仍然不能满足您的phonegap专家的要求,请询问他将如何改进此代码

从可信和/或官方来源寻求答案

嗯,我也不是电话鸿沟专家,但是,有

消息来源怎么说? 好吧,作为一个例子,让我们看看科尔多瓦如何发送它的消息。我提出:

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

你的东西怎么了?
我不确定你的同事提出的确切问题是什么,但似乎确实如此。所以,就是这样。但是,如果您的
appView
CordovaWebView
,您可以用与Cordova本身相同的方式调用它(如上所示)。

您能进一步解释最终目标吗?我不是100%清楚
在键盘显示时用javascript引发事件。你想让插件知道键盘何时显示吗?如果是这样的话,插件应该做什么呢?PhoneGap专家给出了什么作为他们的推理?我认为这种方法不被接受的原因是一个组织——javascript与java的混合。最后,我向java传递了一个javascript回调,这是可以接受的
appView.sendJavascript("keyboardShown();")
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;
}