1. 程式人生 > >騰訊瀏覽器(X5WebView的使用)

騰訊瀏覽器(X5WebView的使用)

我們在使用Android原生WebView的時候總會遇到各種各樣的相容性問題,比如----遇到 <iframe>標籤引入的視訊連結的時候,發現無法全屏觀看,這個時候就需要使用X5WebView了,還可以進行小窗播放。

本文Demo地址:http://download.csdn.net/download/eueheuen/10265354

GitHub地址:https://github.com/EUEHBin/Demo(歡迎Star)

官方地址:http://x5.tencent.com/

下載官方SDK,按照官方文件引入,注意:x5暫時不提供64位so檔案,為了保證64位手機能正常載入x5核心,請參照如下連結修改相關配置

https://x5.tencent.com/tbs/technical.html#/detail/sdk/1/34cf1488-7dc2-41ca-a77f-0014112bcab7

在MyApp中初始化X5:(耗時,放在子執行緒)

public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //初始化 x5核心
        new Thread(new Runnable() {
            @Override
            
public void run() { QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() { @Override public void onCoreInitFinished() { } @Override public void onViewInitFinished(boolean b) { } };
QbSdk.initX5Environment(getApplicationContext(),cb); } }).start(); } }

有關X5的配置:

 //WebView
    private void MyWeb(String url) {
        webView = (ProgressWebView) findViewById(R.id.wb);
        webView.setDrawingCacheEnabled(true);
        webChromeClient = new WebChromeClient();
        webView.setWebChromeClient(webChromeClient);
        webSettings = webView.getSettings();

        // 修改ua使得web端正確判斷(加標識+++++++++++++++++++++++++++++++++++++++++++++++++++++)
//        String ua = webSettings.getUserAgentString();
//        webSettings.setUserAgentString(ua + "這裡是增加的標識");
        
        // 網頁內容的寬度是否可大於WebView控制元件的寬度
        webSettings.setLoadWithOverviewMode(false);
        // 儲存表單資料
        webSettings.setSaveFormData(true);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //關閉webview中快取
        // 是否應該支援使用其螢幕縮放控制元件和手勢縮放
        webSettings.setSupportZoom(true);
        webSettings.setBuiltInZoomControls(true);
        //隱藏原生的縮放控制元件
        webSettings.setDisplayZoomControls(false);

        webView.requestFocus(); //此句可使html表單可以接收鍵盤輸入
        webView.setFocusable(true);
        webSettings.setUseWideViewPort(true);
        webSettings.setSavePassword(true);
        webSettings.setGeolocationEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setJavaScriptEnabled(true);
        // 啟動應用快取
        webSettings.setAppCacheEnabled(false);
        // 設定快取模式
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        // 設定此屬性,可任意比例縮放。
        webSettings.setUseWideViewPort(true);
        webSettings.setSupportZoom(true); //支援縮放,預設為true。是下面那個的前提。
        webSettings.setBuiltInZoomControls(true); //設定內建的縮放控制元件。若為false,則該WebView不可縮放
        //  頁面載入好以後,再放開圖片
        //mSettings.setBlockNetworkImage(false);
        // 使用localStorage則必須開啟
        webSettings.setDomStorageEnabled(true);
        // 排版適應螢幕
        webSettings.setLayoutAlgorithm(com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        // WebView是否支援多個視窗。
        webSettings.setSupportMultipleWindows(true);
        webSettings.setUseWideViewPort(true); // 關鍵點
        webSettings.setAllowFileAccess(true); // 允許訪問檔案
        //將圖片調整到適合webview的大小
        webSettings.setUseWideViewPort(true);
        // webview從5.0開始預設不允許混合模式,https中不能載入http資源,需要設定開啟。
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//            webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
//        }
        // 縮放至螢幕的大小
        webSettings.setLoadWithOverviewMode(true);
        //其他細節操作
        webSettings.setAllowFileAccess(true); //設定可以訪問檔案
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支援通過JS開啟新視窗
        webSettings.setLoadsImagesAutomatically(true); //支援自動載入圖片
        webSettings.setDefaultTextEncodingName("utf-8");//設定編碼格式
        webSettings.setDomStorageEnabled(true);//JS在HTML裡面設定了本地儲存localStorage,java中使用localStorage則必須開啟
        webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setUseWideViewPort(true); //自適應螢幕

        //以下介面禁止(直接或反射)呼叫,避免視訊畫面無法顯示:
        //webView.setLayerType();
        webView.setDrawingCacheEnabled(true);

        //去除QQ瀏覽器推廣廣告
        getWindow().getDecorView().addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                ArrayList<View> outView = new ArrayList<View>();
                getWindow().getDecorView().findViewsWithText(outView,"QQ瀏覽器",View.FIND_VIEWS_WITH_TEXT);
                if(outView.size()>0){
                    outView.get(0).setVisibility(View.GONE);
                }
            }
        });

        webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String s) {



                webView.loadUrl(s);
                return true;
            }

            @Override
            public void onPageStarted(WebView webView, String s, Bitmap bitmap) {
                super.onPageStarted(webView, s, bitmap);

            }

            @Override
            public void onPageFinished(WebView webView, String s) {
                super.onPageFinished(webView, s);

            }

            @Override
            public void onReceivedError(WebView webView, int i, String s, String s1) {
                super.onReceivedError(webView, i, s, s1);
            }

        });

        webView.loadUrl(url);

    }