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的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+