在我的Android应用程序中,我使用了web视图,其中有一个按钮。单击该按钮时,我调用了一个JavaScript函数,该JavaScript函数有一个警报框。在该警报框中显示了标题(“file://”处的页面显示)。我想将此标题更改为我的自定义文本。如何更改此标题?
6jjcrrmo1#
我已经通过实现setWebChromeClient解决了这个问题:
webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { AlertDialog dialog = new AlertDialog.Builder(view.getContext()). setTitle("YourAlertTitle"). setMessage(message). setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //do nothing } }).create(); dialog.show(); result.confirm(); return true; } });
ktca8awb2#
如果您只对alert感兴趣,MKY's answer可以正常工作,但是如果您还对confirm和prompt感兴趣,则还需要覆盖onJsConfirm和onJsPrompt方法。alert和confirm之间的唯一区别是,对于confirm,您需要添加一个setNegativeButton,它在lambda中调用result.cancel()方法。对于prompt,这就有点复杂了,因为你还需要在对话框中添加一个文本编辑器。为此,你需要创建一个EditText对象,并使用AlertDialog.Builder.setView将其添加到对话框中,如this answer中所述。在所有三个对话框中使用setOnDismissListener设置一个解除监听器也是一个好主意,以防对话框以其他方式而不是单击按钮被解除。例如,如果用户单击后退按钮或用户在后台单击,就会发生这种情况。下面是一个完整的代码,适用于alert、confirm和prompt。不要忘记将这三个方法中的"Title"更改为您想要的任何标题。
alert
confirm
prompt
onJsConfirm
onJsPrompt
setNegativeButton
result.cancel()
EditText
AlertDialog.Builder.setView
setOnDismissListener
"Title"
webView.setWebChromeClient(new WebChromeClient(){ @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result){ new AlertDialog.Builder(view.getContext()) .setTitle("Title") .setMessage(message) .setPositiveButton("OK", (DialogInterface dialog, int which) -> result.confirm()) .setOnDismissListener((DialogInterface dialog) -> result.confirm()) .create() .show(); return true; } @Override public boolean onJsConfirm(WebView view, String url, String message, JsResult result){ new AlertDialog.Builder(view.getContext()) .setTitle("Title") .setMessage(message) .setPositiveButton("OK", (DialogInterface dialog, int which) -> result.confirm()) .setNegativeButton("Cancel", (DialogInterface dialog, int which) -> result.cancel()) .setOnDismissListener((DialogInterface dialog) -> result.cancel()) .create() .show(); return true; } @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result){ final EditText input = new EditText(view.getContext()); input.setInputType(InputType.TYPE_CLASS_TEXT); input.setText(defaultValue); new AlertDialog.Builder(view.getContext()) .setTitle("Title") .setMessage(message) .setView(input) .setPositiveButton("OK", (DialogInterface dialog, int which) -> result.confirm(input.getText().toString())) .setNegativeButton("Cancel", (DialogInterface dialog, int which) -> result.cancel()) .setOnDismissListener((DialogInterface dialog) -> result.cancel()) .create() .show(); return true; } });
2条答案
按热度按时间6jjcrrmo1#
我已经通过实现setWebChromeClient解决了这个问题:
ktca8awb2#
如果您只对
alert
感兴趣,MKY's answer可以正常工作,但是如果您还对confirm
和prompt
感兴趣,则还需要覆盖onJsConfirm
和onJsPrompt
方法。alert
和confirm
之间的唯一区别是,对于confirm
,您需要添加一个setNegativeButton
,它在lambda中调用result.cancel()
方法。对于
prompt
,这就有点复杂了,因为你还需要在对话框中添加一个文本编辑器。为此,你需要创建一个EditText
对象,并使用AlertDialog.Builder.setView
将其添加到对话框中,如this answer中所述。在所有三个对话框中使用
setOnDismissListener
设置一个解除监听器也是一个好主意,以防对话框以其他方式而不是单击按钮被解除。例如,如果用户单击后退按钮或用户在后台单击,就会发生这种情况。下面是一个完整的代码,适用于
alert
、confirm
和prompt
。不要忘记将这三个方法中的"Title"
更改为您想要的任何标题。