Android Webview总结_html/css_WEB-ITnose

WBOY
リリース: 2016-06-24 11:16:23
オリジナル
1099 人が閲覧しました

これらは私が集めたWebviewに関する知識で、仕事で使っているものもあれば、まだ使っていないものもあり、自分の役に立つことを願って統一してまとめてみました。そしてみんな。また、どなたでも追記していただければ幸いです(もちろん間違いがあれば修正してください、よろしくお願いします)。

詳細については公式ドキュメントを参照してください:)

1. 権限

2. Webview オブジェクトを作成します

WebView webview = new WebView (this);

3. Web ページをロードする方法

loadData(String data, String mimeType, Stringcoding)des:WebView に指定されたデータをロードします。as:
       String summary = "<html><body>You scored <b>192</b> points.</body></html>";       webview.loadData(summary, "text/html", null);
ログイン後にコピー
  • loadDataWithBaseURL(StringbaseUrl, String data,文字列 mimeType 、文字列エンコーディング、文字列historyUrl)des:指定されたデータを WebView にロードし、指定された URL をコンテンツのベース URL として使用します。
  • loadUrl(String url)des:指定された url をロードします。as: webView.loadUrl (" http://www.jianshu.com/"); //Web ページをロードします。 webView.loadUrl("file:///android_asset/html/index.html"); //Web ページをローカルにロードします。 assert directory webView.loadUrl( "content://com.Android.htmlfileprovider/sdcard/kris.html"); // SD カード html をロードします
  • loadUrl(String url, MapextraHeaders) 指定された URL をロードします追加のヘッダーを追加します。
  • postUrl(String url, byte[] postData)des: "POST" メソッドを使用して postData を含む URL をこの WebView に読み込みます。
  • Intent を使用してシステム ブラウザー
          Uri uri = Uri.parse("http://www.jianshu.com/");      Intent intent = new Intent(Intent.ACTION_VIEW, uri);      startActivity(intent);
    ログイン後にコピー
    を呼び出します
  • 4. セットアップします。 Webview

webView.clearHistory();webView.clearCache(true);webView.clearFormData();webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);// 隐藏滚动条webView.requestFocus();webView.requestFocusFromTouch();
ログイン後にコピー
  • 5. Webview 補助クラス
1>WebSettings

JavaScript の使用の許可、キャッシュの使用の許可、組み込みの使用の許可など、WebView のプロパティ、ステータスなどを設定します。ズームコンポーネント、ISの設定サポートなど。

公式ドキュメント
  • WebSettings オブジェクトを取得します: WebSettings mWebSettings = webView.getSettings();
  • 例:
    WebSettings mWebSettings = webView.getSettings();mWebSettings.setJavaScriptEnabled(true);// 支持JSmWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过js打开新的窗口mWebSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);//提高渲染等级mWebSettings.setBuiltInZoomControls(false);// 设置支持缩放mWebSettings.setDomStorageEnabled(true);//使用localStorage则必须打开mWebSettings.setBlockNetworkImage(true);// 首先阻塞图片,让图片不显示mWebSettings.setBlockNetworkImage(false);//  页面加载好以后,在放开图片:mWebSettings.setSupportMultipleWindows(false);// 设置同一个界面mWebSettings.setBlockNetworkImage(false);mWebSettings.setCacheMode(1);mWebSettings.setNeedInitialFocus(false);// 禁止webview上面控件获取焦点(黄色边框)
    ログイン後にコピー
  • 2>WebViewClient
  • 主に、WebView がさまざまな通知やリクエスト イベントを処理するのに役立ちます (例: インターフェイスの表示方法など)リンクをクリックする、ページの読み込みが開始される、読み込み後に実行されるアクションなど)

公式ドキュメント
  • webView.setWebViewClient(new WebViewClient() {  @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);  }  @Override  public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {      super.onReceivedError(view, errorCode, description, failingUrl);      // 这里进行无网络或错误处理,具体可以根据errorCode的值进行判断,  }  @Override  public boolean shouldOverrideUrlLoading(WebView view, String url) {      view.loadUrl(url);      /**       * 网页跳转:       * 1.在当前的webview跳转到新连接       * view.loadUrl(url);       * 2.调用系统浏览器跳转到新网页       * Intent i = new Intent(Intent.ACTION_VIEW);       * i.setData(Uri.parse(url));       * startActivity(i);       */      return true;  }});
    ログイン後にコピー
    を使用する
  • 3>WebChromeClient
  • WebView が Javascript ダイアログ ボックス、Web サイトのアイコン、Web サイトのタイトル、読み込みを処理するのを支援する

webView.setWebChromeClient(new WebChromeClient() {  @Override  public void onProgressChanged(WebView view, int newProgress) {      // 获得网页的加载进度 newProgress为当前加载百分比      super.onProgressChanged(view, newProgress);  }  @Override  public void onReceivedTitle(WebView view, String title) {      // 获取网页的title,客户端可以在这里动态修改页面的title      // 另外,当加载错误时title为“找不到该网页”      super.onReceivedTitle(view, title);  }});
ログイン後にコピー
  • 6. JS との対話 addJavascriptInterface

前提条件
mWebView.getSettings().setJavaScriptEnabled(true);
ログイン後にコピー
  • 使用
  • mWebView.addJavascriptInterface(new JSInterface(), "jsInterface");  JSInterface对象:public class JSInterface {  @JavascriptInterface  public void methodA() {    }  @JavascriptInterface  public void methodB(String webMessage) {    }}
    ログイン後にコピー

    注: 1.JavascriptInterface は、バージョン 4.2 で Google によって追加された新しいアノテーションです。を避けるためにセキュリティ リスクについては、4.2 より前のシステム バージョンの詳細と適応を参照してください: Android WebView の Js オブジェクト インジェクション脆弱性ソリューションに加えて、オープン ソース プロジェクトのsafe-java-js-webview-bridge が addJavaScriptInterface() を onJsPrompt() に完全に置き換えます。 . 興味のある方はぜひ学んでみてください。 2. JS は Java を呼び出します:

    window.js_callback.viewPicOnJavascript($('article img').index(this));
    ログイン後にコピー

    3. クライアントは JS を呼び出します

    mWebView.loadUrl("javascript:alert()");
    ログイン後にコピー

  • 7. キーボード

webview は前のページに戻ることができますか webView.canGoBack()
  • webview は前のページに戻ります webView.goBack ( );
  • WebView は前進できますか webView.canGoForward()
  • webView は前進します webView.goForward();*
    public boolean onKeyDown(int keyCode, KeyEvent event) {   if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {       mWebView.goBack();       return true;   }   return super.onKeyDown(keyCode, event);}
    ログイン後にコピー
  • 8. その他

WebViewClient そうですね、以前はそのようなものがあるとは知りませんでした。 、今日この記事を書いているときに発見しました。名前から判断すると、Fragment で Webview をカプセル化する必要があります。興味のある方はここをクリックしてください: WebViewClient
  • WebView のクッキーをクリーニング
    CookieSyncManager.createInstance(this);CookieSyncManager.getInstance().startSync();CookieManager.getInstance().removeSessionCookie();
    ログイン後にコピー
  • 長押しイベントをブロック
    webView.setOnLongClickListener(new View.OnLongClickListener() {  @Override  public boolean onLongClick(View v) {      return true;  }});
    ログイン後にコピー
  • Webiew はズーム機能を保持しますが、ズーム コントロールを非表示にします (これは確実なトリックです)
    webView.getSettings().setSupportZoom(true);webView.getSettings().setBuiltInZoomControls(true);webView.getSettings().setDisplayZoomControls(false);// setDisplayZoomControls是在Android 3.0中新增的API.,调用此方法前需要对系统版本进行判断
    ログイン後にコピー
  • WebView が上部または下部にスライドするかどうかを判断します
    if (webView.getContentHeight() * webView.getScale() == (webView.getHeight() + webView.getScrollY())) {  // 处于底端}if(webView.getScrollY() == 0){  //处于顶部}des:getScrollY() //方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离.getHeight()或者getBottom() //方法都返回当前WebView这个容器的高度getContentHeight()返回的是整个html的高度,但并不等同于当前整个页面的高度,因为WebView有缩放功能,所以当前整个页面的高度实际上应该是原始html的高度再乘上缩放比例
    ログイン後にコピー
  • ============================================== = =====

    詳しい内容については、私のトピックに注目してください。転載元を明記してください: http://www.jianshu.com/users/c1b4a5542220/latest_articles

    ありがとうございます。良い週末をお過ごしください。 !

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート