Android webview加载iframe标签的HTML

xiaoxiao2021-02-28  74

我最近项目需求加入文档云 根据后台返回的数据直接返回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();           }       }

转载请注明原文地址: https://www.6miu.com/read-77787.html

最新回复(0)