Table des matières
一.权限
二.创建Webview对象
三.加载网页的方式
四.设置Webview
五.Webview辅助类
六.与JS交互addJavascriptInterface
七.键盘
八.其他
Maison interface Web tutoriel HTML Android Webview总结_html/css_WEB-ITnose

Android Webview总结_html/css_WEB-ITnose

Jun 24, 2016 am 11:16 AM

这些都是曾经收集到的一些关于Webview的知识,有些工作中用到了,有些暂时还没有用到,这次统一整理下,希望对自己,对大家有所帮助。另外,欢迎大家补充(当然,有错也要指正呀,不胜感激),如果可以的话,我会 更新到本帖中。

官方文档 更多知识:)

一.权限

二.创建Webview对象

WebView webview = new WebView(this);

三.加载网页的方式

  • loadData(String data, String mimeType, String encoding)des:Load the given data into the WebView.as:
           String summary = "<html><body>You scored <b>192</b> points.</body></html>";       webview.loadData(summary, "text/html", null);
    Copier après la connexion
  • loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)des:Load the given data into the WebView, use the provided URL as the base URL for the content.
  • loadUrl(String url)des:Load the given url.as: webView.loadUrl("http://www.jianshu.com/"); //加载网络网页webView.loadUrl("file:///android_asset/html/index.html"); //加载本地assert目录下网页webView.loadUrl("content://com.Android.htmlfileprovider/sdcard/kris.html"); // 加载SD卡html
  • loadUrl(String url, Map extraHeaders)Load the given url with the extra headers.
  • postUrl(String url, byte[] postData)des: Loads the URL with postData using "POST" method into this WebView.
  • 利用Intent调用系统浏览器
          Uri uri = Uri.parse("http://www.jianshu.com/");      Intent intent = new Intent(Intent.ACTION_VIEW, uri);      startActivity(intent);
    Copier après la connexion

四.设置Webview

  • webView.clearHistory();webView.clearCache(true);webView.clearFormData();webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);// 隐藏滚动条webView.requestFocus();webView.requestFocusFromTouch();
    Copier après la connexion

五.Webview辅助类

1>WebSettings

设置WebView的一些属性、状态等,例如允许使用javascript,允许使用缓存,允许使用内置的缩放组件,设置支持IS等。

  • 官方文档
  • 获取WebSettings对象:WebSettings mWebSettings = webView.getSettings();
  • For Example
    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上面控件获取焦点(黄色边框)
    Copier après la connexion
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;  }});
    Copier après la connexion
3>WebChromeClient

辅助WebView处理Javascript的对话框、网站图标、网站Title、加载进度等

  • 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);  }});
    Copier après la connexion

六.与JS交互addJavascriptInterface

  • 前提
    mWebView.getSettings().setJavaScriptEnabled(true);
    Copier après la connexion
  • 使用

    mWebView.addJavascriptInterface(new JSInterface(), "jsInterface");  JSInterface对象:public class JSInterface {  @JavascriptInterface  public void methodA() {    }  @JavascriptInterface  public void methodB(String webMessage) {    }}
    Copier après la connexion

    注意:1.JavascriptInterface是4.2版本google新增的一个注解,为了避免一个安全隐患,详细信息及4.2以下系统版本适配看这里: Android WebView的Js对象注入漏洞解决方案 ;另外,safe-java-js-webview-bridge这个开源项目完全用onJsPrompt() 替代了addJavaScriptInterface(),有兴趣的可以学习。2.JS调用Java:

    window.js_callback.viewPicOnJavascript($('article img').index(this));
    Copier après la connexion

    3.客户端调用JS

    mWebView.loadUrl("javascript:alert()");
    Copier après la connexion

七.键盘

  • 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);}
    Copier après la connexion

八.其他

  • WebViewClient好吧,之前确实不知道有这么个东东,今天写这篇贴子的时候才发现的,看名字,应该是在Fragment里对Webview的封装,应该是个好东西。有兴趣的小伙伴们 点进来:WebViewClient
  • WebView cookies清理
    CookieSyncManager.createInstance(this);CookieSyncManager.getInstance().startSync();CookieManager.getInstance().removeSessionCookie();
    Copier après la connexion
  • 屏蔽长按事件
    webView.setOnLongClickListener(new View.OnLongClickListener() {  @Override  public boolean onLongClick(View v) {      return true;  }});
    Copier après la connexion
  • Webiew保留缩放功能但是隐藏缩放控件(这是一招必杀技)
    webView.getSettings().setSupportZoom(true);webView.getSettings().setBuiltInZoomControls(true);webView.getSettings().setDisplayZoomControls(false);// setDisplayZoomControls是在Android 3.0中新增的API.,调用此方法前需要对系统版本进行判断
    Copier après la connexion
  • 判断Webview是否滑动到顶部或底部
    if (webView.getContentHeight() * webView.getScale() == (webView.getHeight() + webView.getScrollY())) {  // 处于底端}if(webView.getScrollY() == 0){  //处于顶部}des:getScrollY() //方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离.getHeight()或者getBottom() //方法都返回当前WebView这个容器的高度getContentHeight()返回的是整个html的高度,但并不等同于当前整个页面的高度,因为WebView有缩放功能,所以当前整个页面的高度实际上应该是原始html的高度再乘上缩放比例
    Copier après la connexion

================================================

更多内容请关注 我的专题 转载请注明 出处: http://www.jianshu.com/users/c1b4a5542220/latest_articles

Thank you and have a nice weekend!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quel est le but du & lt; datalist & gt; élément? Quel est le but du & lt; datalist & gt; élément? Mar 21, 2025 pm 12:33 PM

L'article traite du HTML & lt; Datalist & GT; élément, qui améliore les formulaires en fournissant des suggestions de saisie semi-automatique, en améliorant l'expérience utilisateur et en réduisant les erreurs. COMMANDE COMPRES: 159

Quel est le but du & lt; Progress & gt; élément? Quel est le but du & lt; Progress & gt; élément? Mar 21, 2025 pm 12:34 PM

L'article traite du HTML & lt; Progress & GT; élément, son but, son style et ses différences par rapport au & lt; mètre & gt; élément. L'objectif principal est de l'utiliser & lt; Progress & gt; pour l'achèvement des tâches et & lt; mètre & gt; pour stati

Quel est le but du & lt; mètre & gt; élément? Quel est le but du & lt; mètre & gt; élément? Mar 21, 2025 pm 12:35 PM

L'article traite du HTML & lt; mètre & gt; élément, utilisé pour afficher des valeurs scalaires ou fractionnaires dans une plage, et ses applications courantes dans le développement Web. Il différencie & lt; mètre & gt; De & lt; Progress & gt; et ex

Quel est le but du & lt; iframe & gt; étiqueter? Quelles sont les considérations de sécurité lorsque vous l'utilisez? Quel est le but du & lt; iframe & gt; étiqueter? Quelles sont les considérations de sécurité lorsque vous l'utilisez? Mar 20, 2025 pm 06:05 PM

L'article traite du & lt; iframe & gt; L'objectif de Tag dans l'intégration du contenu externe dans les pages Web, ses utilisations courantes, ses risques de sécurité et ses alternatives telles que les balises d'objet et les API.

Quelle est la balise Meta de la fenêtre? Pourquoi est-ce important pour une conception réactive? Quelle est la balise Meta de la fenêtre? Pourquoi est-ce important pour une conception réactive? Mar 20, 2025 pm 05:56 PM

L'article traite de la balise Meta de la fenêtre, essentielle pour la conception Web réactive sur les appareils mobiles. Il explique comment une utilisation appropriée garantit une mise à l'échelle optimale du contenu et une interaction utilisateur, tandis que la mauvaise utilisation peut entraîner des problèmes de conception et d'accessibilité.

Comment utiliser les attributs de validation du formulaire HTML5 pour valider l'entrée utilisateur? Comment utiliser les attributs de validation du formulaire HTML5 pour valider l'entrée utilisateur? Mar 17, 2025 pm 12:27 PM

L'article discute de l'utilisation des attributs de validation de formulaire HTML5 comme les limites requises, motifs, min, max et longueurs pour valider la saisie de l'utilisateur directement dans le navigateur.

Quelles sont les meilleures pratiques pour la compatibilité entre les navigateurs dans HTML5? Quelles sont les meilleures pratiques pour la compatibilité entre les navigateurs dans HTML5? Mar 17, 2025 pm 12:20 PM

L'article examine les meilleures pratiques pour assurer la compatibilité des navigateurs de HTML5, en se concentrant sur la détection des fonctionnalités, l'amélioration progressive et les méthodes de test.

Comment utiliser le html5 & lt; time & gt; élément pour représenter les dates et les temps sémantiquement? Comment utiliser le html5 & lt; time & gt; élément pour représenter les dates et les temps sémantiquement? Mar 12, 2025 pm 04:05 PM

Cet article explique le html5 & lt; time & gt; élément de représentation sémantique de date / heure. Il souligne l'importance de l'attribut DateTime pour la lisibilité à la machine (format ISO 8601) à côté du texte lisible par l'homme, stimulant AccessIbilit

See all articles