相信在webview中调用confirm的js确认选择框的人都有过这种情况,
框顶总出现一串英文,不过在页面端就不是这样显示的
那么,我们如何在webview调用JS代码的时候,去除上面的英文呢?
其实只能通过重写方法去除.
因为webview中有方法是跟JS中的confirm对应的,
WebChromeClient->onJsConfirm方法,可以使用以下方法重写
代码:
先在asset中创建一个html页面
代码如下:
<html>
<head>
<title>nihao</title>
</head>
<body>
<button id="bt1" οnclick="alert('fffff')">alert</button><br/>
<button id="bt2" οnclick="confirm('fffff')">confirm</button><br/>
<button id="bt3" οnclick="prompt('input something','this is text')">prompt</button><br/>
</body>
</html>
MainActivity的代码:
public class MainActivity extends AppCompatActivity {
private WebView mWebView;
private static final String[] HIDE_DOM_IDS = {"head","s_tab"};
private TextView textView;
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.myweb);
textView = (TextView) findViewById(R.id.mytv);
WebSettings webSettings = mWebView.getSettings();
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
mWebView.setWebChromeClient(new MyWebChromeClient());
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(),"android");
mWebView.loadUrl("file:///android_asset/page.html");
}
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {}
}
/**
* 继承WebChromeClient类
* 对js弹出框时间进行处理
*
*/
final class MyWebChromeClient extends WebChromeClient {
/**
* 处理alert弹出框
*/
@Override
public boolean onJsAlert(WebView view,String url,
String message,JsResult result) {
textView.setText("Alert:"+message);
//对alert的简单封装
new AlertDialog.Builder(MainActivity.this).
setTitle("Alert").setMessage(message).setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//TODO
}
}).create().show();
result.confirm();
return true;
}
/**
* 处理confirm弹出框
*/
@Override
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
textView.setText("Confirm:"+message);
//下面几行是加进去的,目的就是把confirm变化成alert,且去掉英文page
//当然,由于是一个Dialog,你可以将其改变成你需要的Dialog即可,这里就不详细谈了
new AlertDialog.Builder(MainActivity.this).
setTitle("Alert").setMessage(message).setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//TODO
}
}).create().show();
result.confirm();//congfirm是必须的,因为要确认
//下面注释的两句是原本confirm就需要的
//result.confirm();
// return super.onJsConfirm(view, url, message, result);
return true;
}
@Override
public boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) {
textView.setText("Prompt input is :"+message);
result.confirm();
return super.onJsPrompt(view, url, message, message, result);
}
}
}
当然自己要自定义什么对话框,自己可以确定,这里就不细说了
可以通过kongplusjun@163.com联系本人