Android webview加载iframe标签的HTML

来源:互联网 发布:思科路由器端口nat 编辑:程序博客网 时间:2024/05/16 14:44

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


阅读全文
0 0