我觉得shouldOverrideKeyEvent
方法只是告诉系统哪个“窗口”应该收到关键事件的通知;这确实NOT将 WebView javascript 事件传递回 Activity。
如果您需要将信息从 WebView 传递到您的 Activity,您可以使用 JavascriptInterface。请注意,这只能在您控制的网站上进行;否则这将是一个安全漏洞,使您的应用程序可以访问敏感数据。
首先,创建一个类作为您的界面:
class MyJavaScriptInterface{
//Methods to call via js in the WebView go here
}
然后初始化 WebView 上的界面:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new MyJavaScriptInterface(), "JSInterface");
现在,您说要将输入的内容从文本字段传递回活动。为此,为模糊文本字段注册一个事件侦听器,该事件侦听器将在字段失去焦点时触发。
<!-- HTML element to listen for blur -->
<input id="field" type="text" />
<script>
//Communicate with Javascript Interface
var jsFieldBlur = function(field){
//Only call if the interface exists
if(window.JSInterface){
window.JSInterface.onFieldBlur(field.id, field.value);
}
};
//Obtain reference to DOM element
var field = document.getElementById("field");
//Attach blur listener
field.addEventListener("blur", function( event ) {
jsFieldBlur(event.target);
}, true);
</script>
最后,我们需要添加onFieldBlur
方法到 MyJavascriptInterface 类,以便可以通过 javascript 调用它。以这种方式定义的任何方法都必须位于@JavascriptInterface
以便对 WebView 可见。
class MyJavaScriptInterface{
@JavascriptInterface
public void onFieldBlur(String fieldId, String fieldValue){
//Do something with value
Toast.makeText(getContext(), fieldId+"="+fieldValue, Toast.LENGTH_LONG).show();
}
}