1. 程式人生 > >WebView與Js互動所有方法及使用

WebView與Js互動所有方法及使用

首先

你肯定要定義,初始化一個webview,其實網上的例子很多,我這裡就簡單的把一些WebView 中可能會用到的的很重要的屬性以及支援全屏播放視訊該怎麼實現的程式碼粘出來,直接放到專案中去就行了 [java] view plaincopy <span style="white-space:pre"></span><pre name="code" class="java" style="font-size:18px;"><span style="white-space:pre"> </span>private WebView webview;<span style="font-family: Arial, Helvetica, sans-serif;"> </span> [java] view plaincopy <span style="

white-space:pre"> </span>webview = (WebView) findViewById(R.id.webview); [java] view plaincopy <span style="white-space:pre"> </span>// 設定WebView屬性,能夠執行Javascript指令碼 webview.getSettings().setJavaScriptEnabled(true);

常用WebView與Js互動呼叫方法

//設定WebView 可以載入更多格式頁面 t;span style="white-space:pre"> </span>webview.getSettings().setLoadWithOverviewMode(true); //設定WebView使用廣泛的視窗 t;span style="white-space:pre"> </span>webview.getSettings().setUseWideViewPort(true); //設定WebView的

使用者代理字串。如果字串“ua”是null或空,它將使用系統預設的使用者代理字串 t;span style="white-space:pre"> </span>webview.getSettings().setUserAgentString(); //支援手勢縮放 t;span style="white-space:pre"> </span>webview.getSettings().setBuiltInZoomControls(true); //支援2.2以上所有版本 t;span style="white-space:pre"> </span>webview.getSettings().setPluginState(PluginState.ON); //告訴webview啟用應用程式快取api。 t;span style="white-space:pre"> </span>webview.getSettings().setAppCacheEnabled(true); //設定是否啟用了DOM storage API。 t;span style="white-space:pre"> </span>webview.getSettings().setDomStorageEnabled(true); //自動開啟視窗 webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // 沒有的話會黑屏 支援外掛 webView.getSettings().setPluginsEnabled(true);

/** * setAllowFileAccess 啟用或禁止WebView訪問檔案資料 setBlockNetworkImage 是否顯示網路影象 * setBuiltInZoomControls 設定是否支援縮放 setCacheMode 設定緩衝的模式 * setDefaultFontSize 設定預設的字型大小 setDefaultTextEncodingName 設定在解碼時使用的預設編碼 * setFixedFontFamily 設定固定使用的字型 setJavaSciptEnabled 設定是否支援Javascript * setLayoutAlgorithm 設定佈局方式 setLightTouchEnabled 設定用滑鼠啟用被選項 * setSupportZoom 設定是否支援變焦 * */

// 排版適應螢幕

.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);web // 設定Web試圖 注意以下兩個方法十分重要,很多需要重寫: <span>< style="white-space:pre"> </span>//首先設定自定義的WebChromeClient來設定視訊播放的一些問題 busWiFiWebView.setWebChromeClient(new DefaultWebChromeClient()); busWiFiWebView.setWebViewClient(new DefaultWebViewClientClient());

第一個方法:WebChromeClient: //要重寫其中的onShowCustomView 方法 表示進入全屏的時候,以及onHideCustomView 表示退出全屏的時候 介面的話,就是一個webview ,一個FrameLayout ,當全屏的時候就設定webview 隱藏,讓FrameLayout全屏顯示出來,那麼視訊就自動跑到FrameLayout這裡面放了。退出全屏的時候,一樣道理,這裡要用到回撥函式,此處可查詢相關資料。

[java] view plaincopy private class DefaultWebChromeClient extends WebChromeClient { // 一個回撥介面使用的主機應用程式通知當前頁面的自定義檢視已被撤職 CustomViewCallback customViewCallback; // 進入全屏的時候 @Override public void onShowCustomView(View view, CustomViewCallback callback) { // 賦值給callback customViewCallback = callback; // 設定webView隱藏 webview.setVisibility(View.GONE); // 宣告video,把之後的視訊放到這裡面去 FrameLayout video = (FrameLayout) findViewById(R.id.video); // 將video放到當前檢視中 video.addView(view); // 橫屏顯示 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // 設定全屏 setFullScreen(); } // 退出全屏的時候 @Override public void onHideCustomView() { if (customViewCallback != null) { // 隱藏掉 customViewCallback.onCustomViewHidden(); } // 使用者當前的首選方向 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); // 退出全屏 quitFullScreen(); // 設定WebView可見 webview.setVisibility(View.VISIBLE); } @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); } }

下面是兩個方法,設定全屏和退出全屏的方法:注意,我捕捉到了,全屏狀態下和視窗狀態下他們分別的Flags數值。可見如下程式碼

[java] view plaincopy /** * 設定全屏 */ private void setFullScreen() { // 設定全屏的相關屬性,獲取當前的螢幕狀態,然後設定全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 全屏下的狀態碼:1098974464 // 視窗下的狀態嗎:1098973440 }

/** * 退出全屏 */ private void quitFullScreen() { // 聲明當前螢幕狀態的引數並獲取 final WindowManager.LayoutParams attrs = getWindow().getAttributes(); attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setAttributes(attrs); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); }

第二個自定義的WebViewClient,繼承WebViewClient [java] view plaincopy /** * 使用系統預設webview */ private class DefaultWebViewClientClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { [java] view plaincopy <span style="white-space:pre"> </span>return super.shouldOverrideUrlLoading(view, url);

//如果要下載頁面中的遊戲或者繼續點選網頁中的連結進入下一個網頁的話,重寫此方法下,不然就會跳到手機自帶的瀏覽器了,而不繼續在你這個webview裡面展現了 }

@Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { <span style="white-space:pre"> </span>//想在收到錯誤資訊的時候,執行一些操作,走此方法 } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); //想在頁面開始載入的時候,執行一些操作,走此方法 } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //想在頁面載入結束的時候,執行一些操作,走此方法 } }

最後

還有一點很重要,要想進入同過webview瀏覽網頁,而且點返回鍵是想在webview中返回,而不是直接退出程式,那麼就得重寫onKeyDown方法。還有

[java] view plaincopy @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { WebView webView = (WebView) findViewById(R.id.webview_passenger); if (webView.canGoBack()) { // goBack()表示返回WebView的上一頁面 webView.goBack(); //退出全屏 quitFullScreen(); } else { } return true; } return super.onKeyDown(keyCode, event);