android 浏览器控件[通俗易懂]

android 浏览器控件[通俗易懂]在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。 什么是webkit WebKit是MacOSXv10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。同时,WebKit也是MacOSX的Safari网页浏览器的基础。WebKit是一个开源项目,主要由KDE的KHTML修改而来并且

大家好,又见面了,我是你们的朋友全栈君。

在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。 

什么是webkit 

WebKit是Mac OS X v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。 同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源项目,主要由KDE的KHTML修改而来并且包含了一些来自苹果公司的一些组件。 

传统上,WebKit包含一个网页引擎WebCore和一个脚本引擎JavaScriptCore,它们分别对应的是KDE的KHTML和KJS。不过, 随着JavaScript引擎的独立性越来越强,现在WebKit和WebCore已经基本上混用不分(例如Google Chrome和Maxthon 3采用V8引擎,却仍然宣称自己是WebKit内核)。 

这里我们初步体验一下在android是使用webview浏览网页,在SDK的Dev Guide中有一个WebView的简单例子 。 

在开发过程中应该注意几点: 
    1.AndroidManifest.xml中必须使用许可”android.permission.INTERNET”,否则会出Web page not available错误。
    2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
        webview.getSettings().setJavaScriptEnabled(true);  
    3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。

 

  1. mWebView.setWebViewClient(new WebViewClient(){       
  2.                     public boolean shouldOverrideUrlLoading(WebView view, String url) {       
  3.                         view.loadUrl(url);       
  4.                         return true;       
  5.                     }       
  6.         });   

 

 

 4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。

 

  1. public boolean onKeyDown(int keyCode, KeyEvent event) {       
  2.         if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {       
  3.             mWebView.goBack();       
  4.                    return true;       
  5.         }       
  6.         return super.onKeyDown(keyCode, event);       
  7.     }     

 

 

下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。

package com.orgcent.webview;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebSettings.LayoutAlgorithm;

public class AndroidWebViewActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        WebView content_wv = (WebView) findViewById(R.id.content_wv);
        WebSettings ws = content_wv.getSettings();
        ws.setJavaScriptEnabled(true); // 设置支持javascript脚本
        ws.setAllowFileAccess(true); // 允许访问文件
        ws.setBuiltInZoomControls(true); // 设置显示缩放按钮
        ws.setSupportZoom(true); //支持缩放

        /**
         * 用WebView显示图片,可使用这个参数
         * 设置网页布局类型:
         * 1、LayoutAlgorithm.NARROW_COLUMNS : 适应内容大小
         * 2、LayoutAlgorithm.SINGLE_COLUMN:适应屏幕,内容将自动缩放
         */

        ws.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
        ws.setDefaultTextEncodingName(“utf-8”); //设置文本编码
        ws.setAppCacheEnabled(true);
        ws.setCacheMode(WebSettings.LOAD_DEFAULT);//设置缓存模式

        //添加Javascript调用java对象
        content_wv.addJavascriptInterface(this“java2js”);
        content_wv.setWebViewClient(new WebViewClientDemo());
        content_wv.setWebChromeClient(new WebViewChromeClientDemo());
        //设置打开的网页
        content_wv.loadUrl(“http://orgcent.com”);
        //使用WebView来显示图片
        content_wv.loadData(“<img src=’http://orgcent.com’/>”“text/html”“utf8”);
    }

    private class WebViewClientDemo extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            view.loadUrl(url);// 当打开新链接时,使用当前的 WebView,不会使用系统其他浏览器
            return true;
        }
    }

    private class WebViewChromeClientDemo extends WebChromeClient {

        // 设置网页加载的进度条
        public void onProgressChanged(WebView view, int newProgress) {

        }

        // 获取网页的标题
        public void onReceivedTitle(WebView view, String title) {

        }

        // JavaScript弹出框
        @Override
        public boolean onJsAlert(WebView view, String url, String message,
                JsResult result) {

            return super.onJsAlert(view, url, message, result);
        }

        // JavaScript输入框
        @Override
        public boolean onJsPrompt(WebView view, String url, String message,
                String defaultValue, JsPromptResult result) {

            return super.onJsPrompt(view, url, message, defaultValue, result);
        }

        // JavaScript确认框
        @Override
        public boolean onJsConfirm(WebView view, String url, String message,
                JsResult result) {

            return super.onJsConfirm(view, url, message, result);
        }
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146344.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ubuntu命令卸载软件「建议收藏」

    Ubuntu命令卸载软件「建议收藏」1.打开一个终端,输入dpkg–list,按下Enter键,终端输出以下内容,显示的是你电脑上安装的所有软件。2.在终端中找到你需要卸载的软件的名称,列表是按照首字母排序的。3.在终端上输入命令sudoapt-get–purgeremove包名(–purge是可选项,写上这个属性是将软件及其配置文件一并删除,如不需要删除配置文件,可执行sudoapt-getr…

    2022年5月30日
    36
  • js页面跳转代码_js自动跳转到指定页面

    js页面跳转代码_js自动跳转到指定页面<scripttype=”text/javascript”>try{varurlhash=window.location.hash;if(!urlhash.match(“fromapp”)){if((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iPad)/i))){window.location=’/mb/index….

    2022年8月13日
    5
  • 数据挖掘 韩家炜_数据挖掘的特点

    数据挖掘 韩家炜_数据挖掘的特点第三版25页  数据挖掘又称知识发现(KDD:KnowledgeDiscoveryinDatabase),即“从数据中挖掘知识”。  丰富的数据以及对强有力的数据分析工具的需求,这种情况被描述为“数据丰富,但信息匮乏”。数据挖掘可以看作信息技术自然进化的结果。数据库和数据管理产业在一些关键功能的开发上不断发展:数据收集和数据库创建数据管理(包括数据存储和检索、数据库事务处理)高级数

    2022年10月29日
    0
  • SQL中SELECT语句详解「建议收藏」

    SQL中SELECT语句详解「建议收藏」本篇文章讲述SQL语句中的SELECT查询语句,以供参考,如有错误或不当之处还望大神们告知。简单查询SELECT-FROM用于无条件查询单张表中的行或列假设有表如图所示查询名字叫‘叶清逸’的记录:select*fromT_USERwhereu_name=’叶清逸’;查询结果:查询一个或多个属性,u_name,u_age,u_scor…

    2022年4月29日
    54
  • GOD IS A GIRL_is a girl

    GOD IS A GIRL_is a girl

        回忆起我发现真理
      allovertheworld,sheisknownasagirl
      犹如全世界所知她都是唯一的女孩
      tothosewhoarefree,themindshallbekey
      放开你的思想理解就是真理
      forgottenasthepast,causehistorywilllast
      犹如遗忘的过去历史将会延续……

    2022年10月8日
    0
  • 电子设计(2)三极管稳压电路仿真分析「建议收藏」

    电子设计(2)三极管稳压电路仿真分析「建议收藏」这篇博客主要是三极管稳压电路的仿真分析。

    2022年6月20日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号