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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 电脑蓝屏代码0x000000ed的解决方法_蓝屏错误代码0xc000007b

    电脑蓝屏代码0x000000ed的解决方法_蓝屏错误代码0xc000007b一些用户发现自己的XP系统出现蓝屏,屏幕上显示的代码是0x000000ED,遮盖如何解决呢?今天小编就给大家分享一下解决这个问题的方法吧。导致蓝屏原因:一般都是由系统软件、内存、硬盘引起的。解决方法:1电脑不心装上了恶意软件,或上网时产生了恶意程序,建议用360卫士、金山卫士等软件,清理垃圾,查杀恶意软件,就可能解决。实在不行,重装,还原过系统,可以解决软件引起的问题。2如果不能进入系统,可…

    2022年10月8日
    0
  • Scipy randint 与 Numpy randint 的区别[通俗易懂]

    scipy.stats.randint:https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.stats.randint.htmlnumpy.random.randint:https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.randin…

    2022年4月12日
    47
  • 虚拟存储容量_虚存空间的最大容量

    虚拟存储容量_虚存空间的最大容量虚拟存储的容量受到下列哪一个因素的限制影响最大?DA. 磁盘空间大小B. 物理内存大小C. 数据存放的实际地址D. 计算机地址位数分析:这题应该是计算机地址位数才对。从影响上讲:虚存容量=min(2^计算机位数,内存+外存);  根据程序执行的互斥性和局部性两个特点,我们允许作业装入的时候只装入一部分,另一部分放在磁盘上,当需要的时候再装入到主存,这样以来,

    2022年9月26日
    0
  • vs 2013 未能正确加载 Mircosoft Vistual Studio Tools for Application 2013 ….包

    vs 2013 未能正确加载 Mircosoft Vistual Studio Tools for Application 2013 ….包打开vs快捷菜单所在的文件夹可以看到

    2022年8月18日
    18
  • Device 与 platform device的不同(一)[通俗易懂]

    Device 与 platform device的不同(一)[通俗易懂]Device与platformdevice在注册方法上有所不同。Device注册有两步,platformdevice注册也有两步,它们第一步相同,都是initialize设备,但第二步有所不同,Device是直接调用device_add()函数来add设备,而platformdevice则调用platform_device_add()函数。实际上,platfo

    2022年7月24日
    11
  • GT注册大全-终结动态修订版「建议收藏」

    GT注册大全-终结动态修订版「建议收藏」本次‘GT注册大全-终结动态修订版’的特点:1.仅中文名称共享软件范围来说为国内乃至世界范围最新最全,通用注册信息有效率最高;2.较之前版本删除了N多已完全失效的注册信息,增加了N多新旧有效注册信息;3.保持了GT注册大全原有的按软件发布时间排列,软件按同系列或同一制作公司及个人软件作者来合并,提供软件相关下载页面或直接下载链接,非通用注册信息一律标明,必要时附带说明等特点;4.进一步完善了‘GT

    2022年5月20日
    32

发表回复

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

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