WebChromeClient 未向 onJsPrompt 函数显示 "message" 参数
WebChromeClient not displaying the "message" parameter to the onJsPrompt function
我希望我的 WebView 像网络浏览器一样显示提示。
从其他关于 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")
所以我希望提示说 "Test"。
这完全打破了嵌入到应用程序中的 WebView 的沉浸感。如何让 WebChromeClient 显示我实际传递的文本?
您需要在 WebChromeClient
下的 onJsPrompt
中创建一个 AlertDialog
并附加一个 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;
}
我希望我的 WebView 像网络浏览器一样显示提示。
从其他关于 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")
所以我希望提示说 "Test"。
这完全打破了嵌入到应用程序中的 WebView 的沉浸感。如何让 WebChromeClient 显示我实际传递的文本?
您需要在 WebChromeClient
下的 onJsPrompt
中创建一个 AlertDialog
并附加一个 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;
}