webview js alert()提示执行失效解决方法
2014-12-25 12:53:58 By: shinyuu
今天在项目中用到WebView、网页里面使用了JS的alert()方法、在配置了webview的setting属性后、发现JS的alert()方法不能正常提示、即使设置了以下属性也不行
代码如下
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setAllowFileAccess(true);// 设置允许访问文件数据
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webSettings.setDomStorageEnabled(true);
webSettings.setDatabaseEnabled(true);
解决办法:
webview只是一个承载体、各种内容的渲染需要使用webviewChromClient去实现、所以set一个默认的基类WebChromeClient就行
代码如下:
mWebView.setWebChromeClient(new MyWebChromeClient());
之所以不直接使用WebChromeClient、是因为WebChromeClient的alert()效果不是很好看、一定会和你App的风格不统一、需要进行封装、继承WebChromeClient类、对js弹出框时间进行处理
MyWebChromeClient代码如下
final class MyWebChromeClient extends WebChromeClient { //处理alert弹出框 @Override public boolean onJsAlert(WebView view,String url, String message,JsResult result) { Log.d(LOG_TAG,"onJsAlert:" message"); mReusultText.setText("Alert:" message); //对alert的简单封装 new AlertDialog.Builder(WebViewDemo.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) { Log.d(LOG_TAG, "onJsConfirm:" message); mReusultText.setText("Confirm:" message); result.confirm(); return super.onJsConfirm(view, url, message, result); } //处理prompt弹出框 @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { Log.d(LOG_TAG,"onJsPrompt:" message); mReusultText.setText("Prompt input is :" message); result.confirm(); return super.onJsPrompt(view, url, message, message, result); } }
这样就可以完美的解决WebView的JS alert()问题、希望对大家有帮助
若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力
想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)
或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)
如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教
为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)
感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛