android WebView总结

浏览器控件是每一个开发环境都具备的,这为马甲神功提供了用武之地。windows的有webbrowserandroidios都有webview。仅仅是其引擎不同,相对于微软的webbrowserandroidioswebview的引擎都是webkit,对Html5提供支持。本篇主要介绍androidwebview之强大。

A.    webview组件怎样使用

 

1)       加入权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。

2)       在要Activity中生成一个WebView组件:WebView webView = new WebView(this);或者能够在activitylayout文件中加入webview控件:

<WebView

android:id="@+id/wv"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:text="@string/hello"

    />

3)       设置WebView基本信息:
          假设訪问的页面中有Javascript,则webview必须设置支持Javascript
          webview.getSettings().setJavaScriptEnabled(true);  
          触摸焦点起作用
          requestFocus();
          取消滚动栏
          this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

 

4)       设置WevView要显示的网页:
          互联网用:webView.loadUrl("http://www.google.com"); 
          本地文件用:webView.loadUrl("file:///android_asset/XX.html");  本地文件存放在:assets文件里

5)       假设希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。

WebView加入一个事件监听对象(WebViewClient)并重写当中的一些方法:
 shouldOverrideUrlLoading:对网页中超链接button的响应。当按下某个连接时WebViewClient会调用这种方法,并传递參数:按下的url。比方当webview内嵌网页的某个数字被点击时,它会自己主动觉得这是一个电话请求。会传递urltel:123,假设你不希望如此可通过重写shouldOverrideUrlLoading函数解决:

  

 public boolean shouldOverrideUrlLoading(WebView view,String url){if(url.indexOf("tel:")<0){//页面上有数字会导致连接电话view.loadUrl(url);}return true;          }


       另外还有其它一些可重写的方法 
1
,接收到Http请求的事件
onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) 

2,打开链接前的事件
public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } 

这个函数我们能够做非常多操作,比方我们读取到某些特殊的URL。于是就能够不打开地址。取消这个操作,进行预先定义的其它操作,这对一个程序是非常必要的。


 
3
。加载页面完毕的事件
public void onPageFinished(WebView view, String url){ } 

相同道理,我们知道一个页面加载完毕,于是我们能够关闭loading条,切换程序动作。
 
4
。加载页面開始的事件
public void onPageStarted(WebView view, String url, Bitmap favicon) { } 

这个事件就是開始加载页面调用的,通常我们能够在这设定一个loading的页面。告诉用户程序在等待网络响应。


 
通过这几个事件。我们能够非常轻松的控制程序操作,一边用着浏览器显示内容。一边监控着用户操作实现我们须要的各种显示方式。同一时候能够防止用户产生误操作。
      

6)       假设用webview点链接看了非常多页以后。假设不做不论什么处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身。假设希望浏览的网页回退而不是退出浏览器。须要在当前Activity中处理并消费掉该Back事件。
      
 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。

  
 public boolean onKeyDown(int keyCoder,KeyEvent event){if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){webview.goBack();   //goBack()表示返回webView的上一页面return true;}return false;}


B.    Webviewjs交互

Webviewjs的双向交互才是androidwebview强大所在。也是马甲精神可以彻底运行的基础保障。

首先,webview能够定义一个在其内嵌页面中能够触发的事件

 

 wv.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");private final class DemoJavaScriptInterface{DemoJavaScriptInterface(){}public void clickonAndroid( final String order){mHandler.post(newRunnable(){@Overridepublic void run(){jsonText="{"name":""+order+""}";wv.loadUrl("javascript:wave("+jsonText+")");}});}
}

通过以上代码,就可以实如今其内嵌网页中触发window.demo.clickOnAndroid(str)事件并传參数strwebviewWebview接收到str之后,能够通过以上代码触发其内嵌页面中的js函数wave(str)。这样就能够实现网页触发webview的事件并传參数,webview接收參数并调用js函数。

以下看我的Html脚本:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<script type="text/javascript" src="jquery.js"></script>

<script>

function toclient()

{

    var order=$("#val").val();

window.demo.clickonAndroid(order);

   

    }

   

    function wave(str){

       //alert(str.name);

       $("#fromclient").text(str.name);

    }

</script>

</head>

    <body>这是一个html页面

    <br/>

 输入一个字符串:<br/>

  <input id="val" />

        <input type="submit" value="点击提交给client"

        onclick="toclient();"/>

      <br /> 

        显示返回:<label id="fromclient"></label>

    </body>

</html>

通过脚本看到wavestr)函数是负责将原来传给webview的数据又一次拿回页面。效果图例如以下:

 


另外,假设你想获取页面的一些处理数据并交给webviewclient处理。可在wave函数里将数据alert,然后webview中重写WebChromeClientonJsAlert函数,详细代码例如以下

wv.setWebChromeClient(new MyWebChromeClient());final  class MyWebChromeClient extends WebChromeClient{@Overridepublic booleanonJsAlert(WebView view, String url, String message, final JsResult result) { //message就是wave函数在alert串。所以,你可以androidclient在该数据处理result.confirm();        } return true;  }





转载于:https://www.cnblogs.com/yxwkf/p/4567988.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言大数倍数,leetcode-1346(检查整数及其两倍数是否存在)--C语言实现

求&#xff1a;给你一个整数数组 arr&#xff0c;请你检查是否存在两个整数 N 和 M&#xff0c;满足 N 是 M 的两倍(即&#xff0c;N 2 * M)。更正式地&#xff0c;检查是否存在两个下标 i 和 j 满足&#xff1a;i ! j0 < i, j < arr.lengtharr[i] 2 * arr[j]示例 1&am…

LeetCode 4 Median of Two Sorted Arrays

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (mn)). 题目很简单&#xff0c;比较两数组当前指针指向的值&#xff0c;选择小的添加到新数组&…

Windows消息传递机制详解

Windows是一个消息&#xff08;Message&#xff09;驱动系统。Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信的手段。应用程序想要实现的功能由消息来触发&#xff0c;并且靠对消息的响应和处理来完成。必须注意的是&#xff0c;消息并非是抢占性的&…

c语言求树上节点的双亲,用非递归算法求二叉树叶子结点的c语言代码怎样写?...

递归算法&#xff1a;是一种直接或者间接地调用自身的算法。在计算机编写程序中&#xff0c;递归算法对解决一大类问题是十分有效的&#xff0c;它往往使算法的描述简洁而且易于理解。递归算法的特点递归过程一般通过函数或子过程来实现。递归算法&#xff1a;在函数或子过程的…

质数之和c语言编程,C程序检查一个数字是否可以表示为两个质数之和

C程序检查一个数字是否可以表示为两个质数之和在此示例中&#xff0c;您将学习检查用户输入的整数是否可以表示为所有可能组合的两个质数之和。要理解此示例&#xff0c;您应该了解以下C语言编程主题&#xff1a;为了完成此任务&#xff0c;我们将创建一个名为checkPrime()的函…

第二次冲刺阶段 站立会议09

昨天做了什么&#xff1a;昨天把程序进行了整合 今天要做什么&#xff1a;今天我们的项目大体完成了&#xff0c;进行最后一次的测试 遇到的困难&#xff1a;整个项目整合在一起后&#xff0c;运行起来有点卡转载于:https://www.cnblogs.com/yuanyajiao/p/4575945.html

uoj #118. 【UR #8】赴京赶考 水题

#118. 【UR #8】赴京赶考 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/118 Description 高中&#xff0c;高中&#xff0c;短暂的三年。NOI是高中结业考试&#xff0c;而高考在每年暑假举行。高二暑假&#xff0c;这是你最后一次参加高考的机会。…

c语言求前15项中偶数项的和,偶数前n项和

初中数学相较于小学数学&#xff0c;在内容、难度等方面均有提高&#xff0c;因此在学生学习中&#xff0c;很多家长不知道怎样去辅导孩子学习数学&#xff0c;今天小编整理了偶数前n项和&#xff0c;仅供参考!1 等差数列的奇数项的前n项和和偶数的前n项和怎么求_百度知道1&am…

x什么意思c语言新闻app啊我et,C语言笔试题目

4、关键字const有什么含意&#xff1f;表示常量不可以修改的变量。5、关键字volatile有什么含意&#xff1f;并举出三个不同的例子&#xff1f;提示编译器对象的值可能在编译器未监测到的情况下改变。int (*s[10])(int) 表示的是什么啊int (*s[10])(int) 函数指针数组&#xff…

openGl

OpenGL 作为当前主流的图形API之一&#xff0c;它在一些场合具有比DirectX更优越的特性。 1、与C语言紧密结合。 2、强大的可移植性。 3、高性能的图形渲染。 OpenGL 官方网站&#xff08;英文&#xff09;http://www.opengl.org 第一步&#xff0c;选择一个编译环境 现在Wind…

在visual studio 2010+中调用ffmpeg编译时 报错error LNK xxxx: 模块对于 SAFESEH 映像是不安全的。...

解决该错误的方法: 1.右键单击该项目选择“属性”。 2.在属性页中选择&#xff1a;配置选项->链接器->命令行。 3. 在命令行的“其他选项”中输入/SAFESEH:NO。 4.点击确定&#xff0c;从新编译即可通过。 转载于:https://www.cnblogs.com/eachan/p/4582031.html

八皇后问题c语言循环,八皇后问题的12组解

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#define N 8 /*皇后数*/typedef int bool;rot(char d[ ],char s[ ]){ int i;for(i1; i<N; i)d[N-(s[i-1]-0)]i0; d[N] ;}zhuan(char d[ ],char s[ ]){ int i;for(i1; i<N; i)d[s[i-1]-0-1]i0; d[N] ;}bool O…

Java: String.split(....); 结果很意外

String txt "join|公共聊天室||"; String[] paras txt.splite("\\|"); String t1 paras[0]; String t2 paras[1]; String t3 paras[2]; ........java.lang.ArrayIndexOutOfBoundsException: 2 at sm.service.Service.run(Service.java:125) 程序运行中…

linux野指针追踪,【华清远见】野指针和空指针的两个小点

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼作者&#xff1a;吕老师,华清远见嵌入式学院讲师。大家都知道指针的学习对于c语言学习来说可谓是至关重要的&#xff0c;下面我们来说一下在指针中两种比较特殊的关于指针的概念&#xff0c;野指针和空指针。首先说一下空指针。voi…

HTML Meta中添加X-UA-Compatible和IE=Edge,chrome=1有什么作用?

http://blog.hexu.org/archives/1944.shtml?utm_sourcetuicool转载于:https://www.cnblogs.com/fuqiang88/p/4584908.html

av linux,AV Linux 新版发布,多少人知道

原标题&#xff1a;AV Linux 新版发布&#xff0c;多少人知道正文Glen MacArthur宣布发布了全新版本的AV Linux&#xff0c;这是一个基于Debian的面向多媒体的发行版&#xff0c;其中包含一系列音频和视频制作软件。对于那些不了解此发行版的人&#xff0c;你应该知道它包含用于…

C#中拷贝指定文件夹下的所有文件夹目录到指定文件夹中的方法

原文地址&#xff1a;http://www.biye5u.com/article/Csharp/fileprog/2011/4198.html 本文给出了一个在C#中拷贝指定文件夹下的所有文件夹目录到指定文件夹中的方法。public static void CopyFolder(string strFromPath,string strToPath){ //如果源文件夹不存在&#x…

android应用对于内存的大小是有限制的,Android 的内存限制

2、单个应用可用的最大内存Android设备出厂以后&#xff0c;java虚拟机对单个应用的最大内存分配就确定下来了&#xff0c;超出这个值就会OOM。这个属性值是定义在/system/build.prop文件中的dalvik.vm.heapstartsize8m它表示堆分配的初始大小&#xff0c;它会影响到整个系统对…

winfrom 从网页中通过源代码截取文章

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO;//引用流 using System.Net; using System.Text.RegularExpr…

android 判断webview加载成功,Android:如何检查使用webview.loadUrl时url的成功加载

不幸的是&#xff0c;目前在WebView中没有简单的方法来确保页面上的所有内容都已成功加载。我们希望在未来的版本中提供更好的API。让我解释一下你现在可以做什么。首先&#xff0c;为了检测阻止WebView连接服务器加载主页面的任何问题(例如&#xff0c;域名错误&#xff0c;I/…