android webView使用-程序员宅基地

技术标签: ViewUI  ui  移动开发  javascript  

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

一、使用WebView

1.加入权限

    <uses-permission android:name="android.permission.INTERNET" />

2.创建一个webView

通过布局

  <WebView
            android:id="@+id/webkit"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
xml创建webview

或则直接在代码中创建

WebView webView=new WebView(this);

3.通过WebViewClient加载

mWebView.setWebViewClient(new WebViewClient(){       
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {       
                        view.loadUrl(url);       
                        return true;       
                    }       
        });   

4.辅助类WebSettings

通过browser.getSettings()获取WebSettings

a)可以集成对JS的脚本支持

 browser.getSettings().setJavaScriptEnabled(true);

b)对网页的缩放

browser.getSettings().setSupportZoom(true);//网页缩放

对于android4.0版本(4.1是否存在,有待研究)上述方式是不能够实现的

需要继续加入代码

browser.getSettings().setBuiltInZoomControls(true);
                browser.getSettings().setDefaultZoom(ZoomDensity.CLOSE);//默认缩放模式
                browser.setInitialScale(100);

5.加载本地资源assert目录下文件

browser.loadUrl("file:///android_asset/testChart.html");

6.对于返回的控制

重写WebViewClient的onKeyDown方法

public boolean onKeyDown(int keyCode, KeyEvent event) {       
           if ((keyCode == KeyEvent.KEYCODE_BACK) && browser.canGoBack()) {       
                browser.goBack();       
                       return true;       
            }    
            return super.onKeyDown(keyCode, event);       
        }   

 7.加入对JS的调用

<script language="javascript">
        /* This function is invoked by the activity */
        function wave() {
            alert("1");
           // document.getElementById("droid").src="android_waving.png";
            alert("2");
        }
    </script>
    <body>
        <!-- Calls into the javascript interface for the activity -->
        <a onClick="window.demo.clickOnAndroid()"><div style="width:80px;
            margin:0px auto;
            padding:10px;
            text-align:center;
            border:2px solid #202020;" >
                Click me!
        </div></a>
    </body>
   mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");

  final class DemoJavaScriptInterface {

            DemoJavaScriptInterface() {
            }

            /**
             * This is not called on the UI thread. Post a runnable to invoke
             * loadUrl on the UI thread.
             */
            public void clickOnAndroid() {
                mHandler.post(new Runnable() {
                    public void run() {
                        mWebView.loadUrl("javascript:wave()");
                    }
                });

            }
        }

ps:貌似android2.3版本会有VM aborting的问题。

如果需要调用alert的话,需要重写WebChromeClient

mWebView.setWebChromeClient(new MyWebChromeClient());

 final class MyWebChromeClient extends WebChromeClient {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
               /* Log.d(LOG_TAG, message);
                result.confirm();
                return true;*/
                return super.onJsAlert(view, url, message, result);
            }
        }

当然我们也可以捕获alert的内容,然后进行重写

mWebView.setWebChromeClient(new WebChromeClient() {
                @Override
                public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                    AlertDialog.Builder b2 = new AlertDialog.Builder(MainActivity.this)
                            .setTitle("alert title").setMessage(message)
                            .setPositiveButton("ok",
                                    new AlertDialog.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog,
                                                int which) {
                                            result.confirm();
                                            // MyWebView.this.finish();
                                        }
                                    });

                    b2.setCancelable(false);
                    b2.create();
                    b2.show();
                    return true;
                }
            });

感谢vanekey兄的大力支持

更多移步这里:

https://code.google.com/p/android/issues/detail?id=12987

http://stackoverflow.com/questions/10104265/android-webview-javascript-doesnt-fire-the-call-back-function

http://www.linuxidc.com/Linux/2011-05/35782.htm

 

 

 

 

转载于:https://www.cnblogs.com/draem0507/archive/2013/06/10/3130613.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33756418/article/details/93807973

智能推荐

英语——句子结构和成分大全_英语成分 do oc-程序员宅基地

文章浏览阅读7.5k次,点赞16次,收藏62次。句子在上面简单句五种句型句中起名词作用,充当主语、宾语、表语和同位语等的各种从句,统称为名词性从句。c. 表变化:become, grow, turn, go, get, fall;b. 表感官:feel, smell, sound, taste, look;d. 表状态:remain, keep, hold, stay, seem.宾语是谓语动词动作的承受者。并列句中的各个简单句彼此独立,互不依从,但它们表达的意思之间有一定的关系。a. be 动词,am, is, are, was, were;_英语成分 do oc

ORA-00439: feature not enabled: Partitioning-程序员宅基地

文章浏览阅读485次。在进行数据库备份导入的时候遇到如下问题:IMP-00003: ORACLE error 439 encounteredORA-00439: feature not enabled: Partitioning查询v$option视..._imp-00003: oracle error 439 encountered ora-00439: feature not enabled: part

android 在设备上安装apk包_安卓安装包绑设备-程序员宅基地

文章浏览阅读355次。使用adb 命令安装1 打开cmd 命令 win+r 输入cmd 命令 打开控制面板输入adb install 然后把把apk 拖拽进去然后回车即可 安装2 adb 卸载apk输入adb uninstall + 包名 即可。。..._安卓安装包绑设备

antv/g6图表决策代码_antv g6 经纬度-程序员宅基地

文章浏览阅读516次。antv/g6在react项目使用js引用_antv g6 经纬度

redis排行榜_java_【Redis 源码日志】- Redis 应用:积分排行榜 - Java 技术驿站-Java 技术驿站...-程序员宅基地

文章浏览阅读306次。积分排行榜是 Redis 的经典应用。倘若数据都存在数据库中,每次访问网页都需要对所有的数据做排序,对于日访问量大的网站来说,不仅服务器吃不消,用户体验也不佳。在 Redis 中提供了 sorted set 数据结构——有序集合,其底层实现是跳表,因此插入和删除的效率都很高,适用于需实时排序的场景,游戏中的积分排行榜就是一个例子。ZSET 命令简介针对有序集合,Redis 准备了一系列的命令,实现..._java redis 帖子访问次数

RV1126笔记_rv1126k pdf-程序员宅基地

文章浏览阅读7.5k次,点赞16次,收藏99次。RV1126(更新完导出pdf保存)文章目录RV1126(更新完导出pdf保存)固件烧录修改调试串口波特率DTSdts的使用以及格式快速定位板子编译的dts解析dts文件驱动和设备树交互过程Pinctrlof_device_id 和 xxx_device_id建立自己的开发板dts查找soc自带的dts外设驱动配置DTS的方式时钟配置驱动实现步骤以太网(RMII)WIFI/BLEWIFII2Ces7243调试查看时钟开启情况PWMMIPI DSI屏配置方式一**:** 使用短字符串匹配写死的**timin_rv1126k pdf

随便推点

Nginx安装_埋坑之路(一)_archive: /opt/nginx/html/rose_patch.zip-程序员宅基地

文章浏览阅读854次。1、GCC——GNU编译器集合(GCC可以使用默认包管理器的仓库(repositories)来安装,包管理器的选择依赖于你使用的Linux发布版本,包管理器有不同的实现:yum是基于RedHat的发布版本;第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码,这正是我们需要的理由。(在Nginx中,如果服务器提供安全网页时则会用到OpenSSL库,我们需要安装库文件和它的开发安装包(openssl和openssl-devel)。RedHat中安装PCRE:(centos也可以使用)_archive: /opt/nginx/html/rose_patch.zip

Java InputStream.read()读取数据流字节,存储到缓冲区数组_java inputstream read-程序员宅基地

文章浏览阅读6.8k次。定义public abstract int read()public int read(byte[] b)public int read(byte[] b,int off,int len)参数:b:存储读入数据的缓冲区;off:数组 b 中将写入数据的初始偏移量;len:要读取的最大字节数返回:读入缓冲区的总字节数;如果因为已经到达流末尾而不再有数据可用,则返回 -1。异常抛出:IOException: 如果不是因为流位于文件末尾而无法读取第一个字节;如果输入.._java inputstream read

文件格式转换——DMG文件格式转换成ISO文件_dmg2iso-程序员宅基地

文章浏览阅读1.6w次。基本概念DMG是MAC OS上的压缩镜像文件,相当于在Windows上常见的ISO文件。DMG在苹果机上可以直接运行加载,在Windows PC上可以通过命令行软件dmg2iso.exe转换成ISO文件。下载下载地址:https://www.softpedia.com/get/System/Hard-Disk-Utils/dmg2iso.shtml使用命令运行格式:..._dmg2iso

二、模型、方式和观点——(一)_产品设计——推理设计案例-程序员宅基地

文章浏览阅读819次。(一)一、推理设计推理设计模型是对设计师在设计中的推理过程的普遍概述。该模型主要应用于有形产品设计。它能在不同层面帮助设计师反思在设计过程中所做的推理。1. 推理设计模型的目的是什么设计一款产品的核心是一个推理过程,即从产品的价值出发,随需求、功能和属性,直至最终产品形态和使用条件的推理过程。产品的功能取决于其:形态、使用方式及使用情境;这意味着——如果设计师对产品的几何形态与物理、化学(材料)特征有所了解,那么原则上可预测该产品的各种属性。如果设计师能进一步了解产品的使用方式及使用环境,_产品设计——推理设计案例

项目学习记录 (一)_successfully created project sku-info-chart. ge-程序员宅基地

文章浏览阅读945次。项目学习_successfully created project sku-info-chart. get started with the

2020-12-21_单片机密码锁连续错误三次锁定30秒-程序员宅基地

文章浏览阅读262次。数字密码锁的设计方案设计要求:1) 通过程序预先设置4位数字作为开锁密码2) 按键为0~9数字键、退位键、开锁键等,用4位数码管显示输入的数字3) 先通过按钮输入4位密码,再按开锁键;如密码正确,绿色指示灯亮,锁打开;密码错误,红色指示灯亮,蜂鸣器报警,一秒钟后停止。连续3次密码错误,红色指示灯闪烁5秒,蜂鸣器报警(另一种频率的声响)4) 连续3次输入密码错误,系统锁定,可设定为30秒后自动解锁或通过输入管理员密码解锁电路组成:5V电源+51单片机最小系统+LCD16..._单片机密码锁连续错误三次锁定30秒