WebChromeClient未向onJsPrompt函数显示“message”参数

时间:2016-11-09 18:38:32

标签: android android-webview webchromeclient

我希望我的WebView能像Web浏览器一样显示提示。

从解决alert()的其他答案中,我发现我必须在我的Java代码中执行类似的操作:

myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
// Next line was added 
myWebView.setWebChromeClient(new WebChromeClient());

这样可以弹出提示,但不会显示我传递给prompt()的消息,而是显示:

The page at "https:..." says:

在javascript中我的调用如下:

prompt("Test")

所以我希望提示说“测试”。

这完全打破了嵌入在应用程序中的WebView的沉浸感。如何让WebChromeClient显示我实际传递的文本?

1 个答案:

答案 0 :(得分:1)

您需要在AlertDialog下的onJsPrompt中创建WebChromeClient并附上EditText作为其视图,如下所示:

@Override boolean onJsPrompt (WebView view, String url, String message, String defaultValue, JsPromptResult result) { 
    final EditText input = new EditText(main);
    input.setInputType(InputType.TYPE_CLASS_TEXT);
    input.setText(defaultValue);
    new AlertDialog.Builder(myApp) 
      .setTitle("App Titler")
      .setView(input)
      .setMessage(message)
      .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which { 
           result.confirm(input.getText().toString()); 
         } 
       })
      .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) {
           result.cancel(); 
         }
       })
     .create()
     .show();
     return true;
 }