【问题标题】:android webview :How to change javaScript alert title text in android webview?android webview:如何更改android webview中的javaScript警报标题文本?
【发布时间】:2016-10-29 10:58:01
【问题描述】:

在我的 android 应用程序中,我在 web 视图中使用了 web 视图,我有一个按钮。单击该按钮时,我正在调用一个 JavaScript 函数,该 JavaScript 函数有一个警报框。在该警报标题中显示(“文件中的页面://“说)。我想将此标题更改为我的自定义文本。 如何更改该标题?

【问题讨论】:

    标签: javascript java android webview


    【解决方案1】:

    我已经通过实现 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;
        } }); 
    

    【讨论】:

      【解决方案2】:

      如果您只对alert 感兴趣,MKY's answer 可以正常工作,但如果您还对confirmprompt 感兴趣,您还需要覆盖onJsConfirmonJsPrompt 方法。

      alertconfirm 之间的唯一区别是,对于 confirm,您需要添加一个 setNegativeButton,它在 lambda 中调用 result.cancel() 方法。

      对于prompt,它有点复杂,因为您还需要在对话框中添加一个文本编辑器。为此,您需要创建一个EditText 对象并使用AlertDialog.Builder.setView 将其添加到对话框中,如this answer 中所述。

      在所有三个对话框中使用setOnDismissListener 设置关闭侦听器也是一个好主意,以防对话框以除单击按钮之外的其他方式关闭。例如,如果用户单击后退按钮或用户在后台单击,就会发生这种情况。

      这是适用于alertconfirmprompt 的完整代码。不要忘记将所有三种方法中的"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;
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-13
        • 1970-01-01
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多