我最近项目需求加入文档云 根据后台返回的数据直接返回iframe标签,但是Android这边想用webview加载,中间出现过各种问题还好最终解决了。所以就整理出一下的代码自己做个笔记同时也希望对您有帮助!
直接上关键性的代码:
这是接口返回的iframe标签 (这是一个动态的PPT的文本,后台可以简单的定一下样式) <iframe src='http://s2.sgld.org/op/embed.aspx?src=http://s1.sgld.org:9191/d6ada647-9ed4-4b5b-b632-e94aa03f5694.pptx' frameborder='0' width='100%px' height='100%px'></iframe>
public static WebView pptWeb(Context context,WebView webview,String iframe,final ProgressBar pb){
WebSettings webSettings = webview.getSettings();
// 设置WebView属性,能够执行Javascript脚本
webSettings.setJavaScriptEnabled(true);
webSettings.setPluginState(PluginState.ON);// 可以使用插件
// 设置用户代理(请求头)使得web端正确判断
webview.getSettings().setUserAgentString(
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
+ "; dccPlan/1.5.8.30");
// "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
+ "; dccPlan/1.5.8.30"
//1.5.8.30 改成自己项目的版本号
webview.setBackgroundColor(0);//这点可以防止有白边
// 设置可以访问文件
webSettings.setAllowFileAccess(true);
// 设置支持缩放
webSettings.setBuiltInZoomControls(true);
webSettings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setUseWideViewPort(true);
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setLoadWithOverviewMode(true);
webSettings.setSupportZoom(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setAllowFileAccess(true);
webSettings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
webSettings.setBlockNetworkImage(true);
webSettings.setSupportMultipleWindows(true);
webSettings.setDisplayZoomControls(false);
webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);//不加上,会显示白边
webview.setVerticalScrollBarEnabled(false);
webview.setHorizontalScrollBarEnabled(false);
//设置 缓存模式
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
// 开启 DOM storage API 功能
webSettings.setDomStorageEnabled(true);
// webview.setWebChromeClient(new WebChromeClient());
// 安卓5.0 WebView 使用WebRTC, 调用摄像头与麦克风时的许可
webview.setWebChromeClient(new WebChromeClient() {
// ---WebRTC:
@Override
public void onPermissionRequest(PermissionRequest request) {
request.grant(request.getResources());
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO 自动生成的方法存根
pb.setProgress(newProgress);// 设置进度值
}
});
// webSettings.getUserAgentString();
// 设置Web视图
webview.setWebViewClient(new webViewClient());
webSettings.setAppCacheEnabled(true);
// 考虑到网页的加载速度,我们可以调用setWebChromeClient()方法
// 滚动条在整个page里
webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
if (!TextUtils.isEmpty(iframe)) {
String url = "<html>"+iframe+"</html>";
webview.loadData(url, "text/html", "utf-8");
}
return webview;
}
public static class webViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;//返回false
}
@Override
public void onPageFinished(WebView view, String url) {
view.getSettings().setBlockNetworkImage(false);
super.onPageFinished(view, url);
}
public void onPageStarted(WebView view, String url) {
super.onPageStarted(view, url, null);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// 不要使用super,否则有些手机访问不了,因为包含了一条 handler.cancel()
super.onReceivedSslError(view, handler, error);
// 接受所有网站的证书,忽略SSL错误,执行访问网页
handler.proceed();
}
}
本文介绍了如何在Android中使用WebView加载包含iframe标签的HTML内容,详细解析了关键代码,包括WebView设置、JavaScript支持以及处理加载进度和SSL错误。通过这个实例,可以解决Android WebView加载动态PPT的问题。
3209

被折叠的 条评论
为什么被折叠?



