Android WebViewのよくある質問と処理方法
4453 ワード
現在html 5は急速に発展しており、多くのnative appがウェブページに埋め込まれ、多変的な市場ニーズを適用している.しかしandroidのwebviewのデフォルトでサポートされている機能は非常に弱く、多くの場所でカスタマイズが必要で、私たちが望んでいる効果を達成することができます.またwebviewは異なるバージョンで異なる程度のバグがあります.次はwebviewでよくある質問をまとめます.
1.WebViewのカスタムエラー表示画面:
2.WebView Cookiesクリーンアップ:
3.cacheと履歴を整理する:
4.Web Viewがページの一番下にスクロールされているかどうかを判断します.
getScrollY()メソッドは、現在の表示領域の先端からページの先端までの距離、すなわち現在のコンテンツがスクロールする距離を返す.
getHeight()またはgetBottom()メソッドは、現在のWebViewというコンテナの高さを返します.
getContentHeightはhtml全体の高さを返すが、現在のページ全体の高さに等しくない.WebViewにはスケール機能があるため、現在のページ全体の高さは実際には元のhtmlの高さにスケールを乗じるべきである.したがって、訂正後の結果、正確な判断方法は、
5.URLブロック:Android WebViewはページ内のfragmentジャンプをブロックできません.しかしurlがジャンプすると、またページリフレッシュが起こり、H 5ページの体験がまた低下します.WebViewにJSメソッドを注入するしかありません.6.WebViewの非ハイパーリンク要求(Ajax要求など)の処理:要求ヘッダを追加する必要がある場合があるが、ハイパーリンク以外の要求はshouldOverrindingでブロックしてwebViewを使用することはできない.loadUrl(String url,HashMap headers)メソッドによるリクエストヘッダの追加は、onWebViewResourceメソッドで対応するリクエストをブロックするなど、urlに特別なタグ/プロトコルを追加し、追加するリクエストヘッダをget形式でshouldInterceptRequest()メソッドでurl末尾のshouldInterceptRequest()メソッドでget形式でブロックする必要があります.例えばJSのロード、画像、Ajaxリクエストなど
7.ページに画像を先に表示します.
8.Webviewが長くなるとシステムのコピーコントロールが呼び出されるので、長押しイベントをブロックします.
9.WebViewでflashサポートを追加するには:
以上の内容は、Android WebViewのよくある問題と処理案についてすべて述べたもので、お気に入りください.
1.WebViewのカスタムエラー表示画面:
/**
* , View WebView
*/
protected void showErrorPage() {
LinearLayout webParentView = (LinearLayout)mWebView.getParent();
initErrorPage();
while (webParentView.getChildCount() > ) {
webParentView.removeViewAt( );
}
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
webParentView.addView(mErrorView, , lp);
mIsErrorPage = true ;
}
protected void hideErrorPage() {
LinearLayout webParentView = (LinearLayout)mWebView.getParent();
mIsErrorPage = false ;
while (webParentView.getChildCount() > ) {
webParentView.removeViewAt( );
}
}
protected void initErrorPage() {
if (mErrorView == null ) {
mErrorView = View.inflate( this , R.layout.online_error, null );
Button button = (Button)mErrorView.findViewById(R.id.online_error_btn_retry);
button.setOnClickListener( new OnClickListener() {
public void onClick(View v) {
mWebView.reload();
}
});
mErrorView.setOnClickListener( null );
}
}
2.WebView Cookiesクリーンアップ:
CookieSyncManager.createInstance( this );
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().removeSessionCookie();
3.cacheと履歴を整理する:
webView.clearCache( true );
webView.clearHistory();
4.Web Viewがページの一番下にスクロールされているかどうかを判断します.
getScrollY()メソッドは、現在の表示領域の先端からページの先端までの距離、すなわち現在のコンテンツがスクロールする距離を返す.
getHeight()またはgetBottom()メソッドは、現在のWebViewというコンテナの高さを返します.
getContentHeightはhtml全体の高さを返すが、現在のページ全体の高さに等しくない.WebViewにはスケール機能があるため、現在のページ全体の高さは実際には元のhtmlの高さにスケールを乗じるべきである.したがって、訂正後の結果、正確な判断方法は、
if (WebView.getContentHeight*WebView.getScale() == (webview.getHeight()+WebView.getScrollY())){ // }
5.URLブロック:Android WebViewはページ内のfragmentジャンプをブロックできません.しかしurlがジャンプすると、またページリフレッシュが起こり、H 5ページの体験がまた低下します.WebViewにJSメソッドを注入するしかありません.6.WebViewの非ハイパーリンク要求(Ajax要求など)の処理:要求ヘッダを追加する必要がある場合があるが、ハイパーリンク以外の要求はshouldOverrindingでブロックしてwebViewを使用することはできない.loadUrl(String url,HashMap headers)メソッドによるリクエストヘッダの追加は、onWebViewResourceメソッドで対応するリクエストをブロックするなど、urlに特別なタグ/プロトコルを追加し、追加するリクエストヘッダをget形式でshouldInterceptRequest()メソッドでurl末尾のshouldInterceptRequest()メソッドでget形式でブロックする必要があります.例えばJSのロード、画像、Ajaxリクエストなど
Ex:
@SuppressLint ( "NewApi" )
@Override
public WebResourceResponse shouldInterceptRequest(WebView view,String url) {
// ( Ajax) , url , imei
String ajaxUrl = url;
// :req=ajax
if (url.contains( "req=ajax" )) {
ajaxUrl += "&imei=" + imei;
}
return super .shouldInterceptRequest(view, ajaxUrl);
}
7.ページに画像を先に表示します.
@Override
public void onLoadResource(WebView view, String url) {
mEventListener.onWebViewEvent(CustomWebView. this , OnWebViewEventListener.EVENT_ON_LOAD_RESOURCE, url);
if (url.indexOf( ".jpg" ) > ) {
hideProgress(); //
mEventListener.onWebViewEvent(CustomWebView. this , OnWebViewEventListener.EVENT_ON_HIDE_PROGRESS, view.getUrl());
}
super .onLoadResource(view, url);
}
8.Webviewが長くなるとシステムのコピーコントロールが呼び出されるので、長押しイベントをブロックします.
mWebView.setOnLongClickListener( new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true ;
}
});
9.WebViewでflashサポートを追加するには:
String temp = "
" ;
String mimeType = "text/html" ;
String encoding = "utf-8" ;
web.loadDataWithBaseURL( "null" , temp, mimeType, encoding, "" );
以上の内容は、Android WebViewのよくある問題と処理案についてすべて述べたもので、お気に入りください.