`
hududumo
  • 浏览: 240701 次
文章分类
社区版块
存档分类
最新评论

android WebView总结

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

A. <wbr><wbr><wbr></wbr></wbr></wbr>webview组件如何使用

<wbr></wbr>

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

2) <wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>在要Activity中生成一个WebView组件:WebView webView = new WebView(this);或者可以在activitylayout文件里添加webview控件:

<WebView

android:id="@+id/wv"

<wbr><wbr><wbr></wbr></wbr></wbr>android:layout_width="fill_parent"

<wbr><wbr><wbr></wbr></wbr></wbr>android:layout_height="fill_parent"

<wbr><wbr><wbr></wbr></wbr></wbr>android:text="@string/hello"

<wbr><wbr><wbr></wbr></wbr></wbr>/>

3) <wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>设置WebView基本信息:
<wbr><span></span><wbr><wbr><span></span><wbr><wbr><span></span><wbr></wbr></wbr></wbr></wbr></wbr></wbr>如果访问的页面中有Javascript,则webview必须设置支持Javascript
<wbr><span></span><wbr><wbr><span></span><wbr><wbr><span></span><wbr><span></span>webview.getSettings().setJavaScriptEnabled(true); <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><span></span><wbr><wbr><span></span><wbr><wbr><span></span><wbr></wbr></wbr></wbr></wbr></wbr></wbr>触摸焦点起作用
<wbr><span></span><wbr><wbr><span></span><wbr><wbr><span></span><wbr><span></span>requestFocus();</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><span></span><wbr><wbr><span></span><wbr><wbr><span></span><wbr></wbr></wbr></wbr></wbr></wbr></wbr>取消滚动条
<wbr><span></span><wbr><wbr><span></span><wbr><wbr><span></span><wbr><span></span>this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

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

5) <wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。给WebView添加一个事件监听对象(WebViewClient)并重写其中的一些方法:
<wbr>shouldOverrideUrlLoading<wbr></wbr></wbr>:对网页中超链接按钮的响应。当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url。比如当webview内嵌网页的某个数字被点击时,它会自动认为这是一个电话请求,会传递urltel:123,如果你不希望如此可通过重写shouldOverrideUrlLoading<wbr></wbr>函数解决:

<wbr><wbr></wbr></wbr>

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


<wbr><span></span><wbr><wbr><span></span><wbr><wbr></wbr></wbr></wbr></wbr></wbr>另外还有其他一些可重写的方法 <wbr><br> 1</wbr>,接收到Http请求的事件
onReceivedHttpAuthReques<wbr>t(WebView view, HttpAuthHandler handler, String host, String realm) <wbr></wbr></wbr>

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

这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
<wbr><br> 3</wbr>
,载入页面完成的事件
public void onPageFinished(WebView view, String url){ } <wbr></wbr>

同样道理,我们知道一个页面载入完成,于是我们可以关闭loading条,切换程序动作。
<wbr><br> 4</wbr>
,载入页面开始的事件
public void onPageStarted(WebView view, String url, Bitmap favicon) { } <wbr></wbr>

这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。
<wbr><br></wbr>
通过这几个事件,我们可以很轻松的控制程序操作,一边用着浏览器显示内容,一边监控着用户操作实现我们需要的各种显示方式,同时可以防止用户产生误操作。
<wbr><wbr><wbr><wbr><wbr><span style="line-height:21px; word-wrap:normal"><wbr></wbr></span></wbr></wbr></wbr></wbr></wbr>

6) <wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。
<wbr><span></span><wbr><wbr><span></span><wbr></wbr></wbr></wbr></wbr>
覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。

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


B. <wbr><wbr><wbr></wbr></wbr></wbr>Webviewjs交互

Webviewjs的双向交互才是androidwebview强大所在,也是马甲精神能够彻底执行的基础保障。

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

  1. wv.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
  2. rivate final class DemoJavaScriptInterface
  3. {
  4. nbsp;DemoJavaScriptInterface(){}
  5. public void clickonAndroid( final String order){
  6. mHandler.post(newRunnable(){
  7. @Override
  8. public void run(){
  9. jsonText="{"name":""+order+""}";
  10. wv.loadUrl("javascript:wave("+jsonText+")");
  11. }
  12. });
  13. }

<wbr><span></span> <p></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">通过以上代码,即可实现在其内嵌网页中触发</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">window.demo.clickOnAndroid(str)</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">事件并传参数</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">str</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">给</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">webview</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">。</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">Webview</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">接收到</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">str</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">之后,可以通过以上代码触发其内嵌页面中的</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">js</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">函数</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">wave(str)</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">。这样就可以实现网页触发</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">webview</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">的事件并传参数,</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">webview</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">接收参数并调用</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">js</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">函数。</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">下面看我的</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">Html</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">脚本:</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;!</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">DOCTYPE</span><span> </span><span style="font-family:'Courier new'; line-height:21px; word-wrap:normal"><span style="color:teal; line-height:21px; word-wrap:normal">html</span><span> </span><span style="color:gray; line-height:21px; word-wrap:normal">PUBLIC</span><span> </span><span style="color:teal; line-height:21px; word-wrap:normal">"-//W3C//DTD HTML 4.01 Transitional//EN"</span><span style="color:#3f7f5f; line-height:21px; word-wrap:normal">"http://www.w3.org/TR/html4/loose.dtd"</span><span style="color:teal; line-height:21px; word-wrap:normal">&gt;</span></span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">html</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&gt;</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">head</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&gt;</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">meta</span><span> </span><span style="font-family:'Courier new'; line-height:21px; word-wrap:normal"><span style="color:#7f7f0; line-height:21px; word-wrap:normal">http-equiv</span><span style="color:black; line-height:21px; word-wrap:normal">=</span><em><span style="color:#2aff0; line-height:21px; word-wrap:normal">"Content-Type"</span></em><span> </span><span style="color:#7f7f0; line-height:21px; word-wrap:normal">content</span><span style="color:black; line-height:21px; word-wrap:normal">=</span><em><span style="color:#2aff0; line-height:21px; word-wrap:normal">"text/html; charset=UTF-8"</span></em><span style="color:teal; line-height:21px; word-wrap:normal">&gt;</span></span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">title</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&gt;</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">Insert title here</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;/</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">title</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&gt;</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">script</span><span> </span><span style="font-family:'Courier new'; line-height:21px; word-wrap:normal"><span style="color:#7f7f0; line-height:21px; word-wrap:normal">type</span><span style="color:black; line-height:21px; word-wrap:normal">=</span><em><span style="color:#2aff0; line-height:21px; word-wrap:normal">"text/javascript"</span></em><span> </span><span style="color:#7f7f0; line-height:21px; word-wrap:normal">src</span><span style="color:black; line-height:21px; word-wrap:normal">=</span><em><span style="color:#2aff0; line-height:21px; word-wrap:normal">"jquery.js"</span></em><span style="color:teal; line-height:21px; word-wrap:normal">&gt;&lt;/</span><span style="color:#3f7f7f; line-height:21px; word-wrap:normal">script</span><span style="color:teal; line-height:21px; word-wrap:normal">&gt;</span></span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">script</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&gt;</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <strong><span style="font-family:'Courier new'; color:#7f550; line-height:21px; word-wrap:normal">function</span></strong><span> </span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">toclient()</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">{</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr></wbr></wbr></wbr></span></span><span></span><strong><span style="font-family:'Courier new'; color:#7f550; line-height:21px; word-wrap:normal">var</span></strong><span> </span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">order=$(</span><span style="font-family:'Courier new'; color:#2aff0; line-height:21px; word-wrap:normal">"#val"</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">).val();</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">window.demo.clickonAndroid(order);</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr></wbr></wbr></wbr></span></span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr></wbr></wbr></wbr></span><span></span>}</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr></wbr></wbr></wbr></span></span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr></wbr></wbr></wbr></span></span><span></span><strong><span style="font-family:'Courier new'; color:#7f550; line-height:21px; word-wrap:normal">function</span></strong><span> </span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">wave(str){</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></span><span></span><span style="font-family:'Courier new'; color:#3f7f5f; line-height:21px; word-wrap:normal">//alert(str.name);</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></span><span></span>$(</span><span style="font-family:'Courier new'; color:#2aff0; line-height:21px; word-wrap:normal">"#fromclient"</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">).text(str.name);</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr></wbr></wbr></wbr></span><span></span>}</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;/</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">script</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&gt;</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;/</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">head</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&gt;</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr></wbr></wbr></wbr></span></span><span></span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">body</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&gt;</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">这是一个</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">html</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">页面</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr></wbr></wbr></wbr></span></span><span></span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">br</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">/&gt;</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr></wbr></span></span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">输入一个字符串:</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">br</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">/&gt;</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr></wbr></span></span><span></span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">input</span><span> </span><span style="font-family:'Courier new'; line-height:21px; word-wrap:normal"><span style="color:#7f7f0; line-height:21px; word-wrap:normal">id</span><span style="color:black; line-height:21px; word-wrap:normal">=</span><em><span style="color:#2aff0; line-height:21px; word-wrap:normal">"val"</span></em><span> </span><span style="color:teal; line-height:21px; word-wrap:normal">/&gt;</span></span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></span><span></span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">input</span><span> </span><span style="font-family:'Courier new'; line-height:21px; word-wrap:normal"><span style="color:#7f7f0; line-height:21px; word-wrap:normal">type</span><span style="color:black; line-height:21px; word-wrap:normal">=</span><em><span style="color:#2aff0; line-height:21px; word-wrap:normal">"submit"</span></em><span> </span><span style="color:#7f7f0; line-height:21px; word-wrap:normal">value</span><span style="color:black; line-height:21px; word-wrap:normal">=</span><em><span style="color:#2aff0; line-height:21px; word-wrap:normal">"</span></em></span><em><span style="font-family:宋体; color:#2aff0; line-height:21px; word-wrap:normal">点击提交给客户端</span><span style="font-family:'Courier new'; color:#2aff0; line-height:21px; word-wrap:normal">"</span></em></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span><span></span><span style="color:#7f7f0; line-height:21px; word-wrap:normal">onclick</span><span style="color:black; line-height:21px; word-wrap:normal">=</span><span style="color:#2aff0; line-height:21px; word-wrap:normal">"toclient();"</span><span style="color:teal; line-height:21px; word-wrap:normal">/&gt;</span></span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></span></span><span></span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">br</span><span> </span><span style="font-family:'Courier new'; line-height:21px; word-wrap:normal"><span style="color:teal; line-height:21px; word-wrap:normal">/&gt;</span><span style="color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"> <wbr></wbr></span></span></span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></span></span><span></span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">显示返回:</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">label</span><span> </span><span style="font-family:'Courier new'; line-height:21px; word-wrap:normal"><span style="color:#7f7f0; line-height:21px; word-wrap:normal">id</span><span style="color:black; line-height:21px; word-wrap:normal">=</span><em><span style="color:#2aff0; line-height:21px; word-wrap:normal">"fromclient"</span></em><span style="color:teal; line-height:21px; word-wrap:normal">&gt;&lt;/</span><span style="color:#3f7f7f; line-height:21px; word-wrap:normal">label</span><span style="color:teal; line-height:21px; word-wrap:normal">&gt;</span></span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><wbr><wbr><wbr></wbr></wbr></wbr></span></span><span></span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;/</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">body</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&gt;</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&lt;/</span><span style="font-family:'Courier new'; color:#3f7f7f; line-height:21px; word-wrap:normal">html</span><span style="font-family:'Courier new'; color:teal; line-height:21px; word-wrap:normal">&gt;</span></p> <p><span style="color:#464646; font:14px/21px simsun; text-align:left; text-transform:none; text-indent:0px; letter-spacing:normal; word-spacing:0px; white-space:normal; orphans:2; widows:2; background-color:rgb(188,211,229)"></span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">通过脚本看到</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">wave</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">(</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">str</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">)函数是负责将原来传给</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">webview</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">的数据重新拿回页面,效果图如下:</span></p> <p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal"><span style="line-height:21px; word-wrap:normal"><img alt="" src="http://hi.csdn.net/attachment/201112/6/0_1323143018Eyk7.gif"><wbr></wbr></span></span></p> <br><p align="left" style="border-width:0px; margin:0px 0px 5px; padding:0px; text-align:left; line-height:21px; list-style-type:none; word-wrap:normal"> <span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">另外,如果你想获取页面的一些处理数据并交给</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">webview</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">客户端处理,可在</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">wave</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">函数里将数据</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">alert</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">,然后</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal">webview</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">中重写</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal; background-color:silver">WebChromeClient</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">的</span><span style="font-family:'Courier new'; color:black; line-height:21px; word-wrap:normal; background-color:silver">onJsAlert</span><span style="font-family:宋体; color:black; line-height:21px; word-wrap:normal">函数,具体代码如下</span></p> <div class="bar"> <div class="tools"> <strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/chenshijun0101/article/details/7045394#"> view plain</a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/chenshijun0101/article/details/7045394#">copy</a><a class="PrintSource" title="print" href="http://blog.csdn.net/chenshijun0101/article/details/7045394#">print</a><a class="About" title="?" href="http://blog.csdn.net/chenshijun0101/article/details/7045394#">?</a> </div> </div> <div class="dp-highlighter bg_java"> <ol class="dp-j"> <li class="alt"><span><span>wv.setWebChromeClient(</span><span class="keyword">new</span><span> MyWebChromeClient()); </span></span></li> <li><span> </span></li> <li class="alt"><span><span class="keyword">final</span><span> </span><span class="keyword">class</span><span> MyWebChromeClient </span><span class="keyword">extends</span><span> WebChromeClient{ </span></span></li> <li><span> </span></li> <li class="alt"><span> <span class="annotation">@Override</span><span> </span> </span></li> <li><span> </span></li> <li class="alt"><span> <span class="keyword">public</span><span> booleanonJsAlert(WebView view, String url, String message, </span><span class="keyword">final</span><span> JsResult result) { </span></span></li> <li><span> </span></li> <li class="alt"><span><span class="comment">//message就是wave函数里alert的字符串,这样你就可以在android客户端里对这个数据进行处理</span><span> </span></span></li> <li><span> </span></li> <li class="alt"><span> result.confirm(); </span></li> <li><span> </span></li> <li class="alt"><span> } </span></li> <li><span> </span></li> <li class="alt"><span><span class="keyword">return</span><span> </span><span class="keyword">true</span><span>; </span></span></li> <li><span> } </span></li> </ol> </div> <span></span> <p>注:该文章为(男人应似海)原创,如需转载请注明出处!</p> <p><a name="OLE_LINK2"></a><a name="OLE_LINK1"></a><em>1.通常情况下 </em>大家可能都想使用WebView打开网页内部链接而不想再调用手机浏览器,我们可以通过以下两种方法实现:</p> <p>(1)为WebView设置一个WebViewClient,并重写shouldOverrideUrlLoading(WebView view, String url)方法。</p> <div class="dp-highlighter bg_java"> <div class="bar"> <div class="tools"> <strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#"> view plain</a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#">copy</a><a class="PrintSource" title="print" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#">print</a><a class="About" title="?" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#">?</a> </div> </div> <ol class="dp-j"> <li class="alt"><span><span class="keyword">class</span><span> MyWebViewClient </span> <span class="keyword">extends</span><span> WebViewClient { </span></span></li> <li><span> </span></li> <li class="alt"><span> <span class="annotation">@Override</span><span> </span> </span></li> <li><span> </span></li> <li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">boolean</span><span> shouldOverrideUrlLoading(WebView view, String url){ </span></span></li> <li><span> </span></li> <li class="alt"><span> <span class="comment">// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边</span><span> </span></span></li> <li><span> </span></li> <li class="alt"><span> view.loadUrl(url); </span></li> <li><span> </span></li> <li class="alt"><span> <span class="keyword">return</span><span> </span><span class="keyword">true</span><span>; </span></span></li> <li><span> </span></li> <li class="alt"><span> } </span></li> <li><span> </span></li> <li class="alt"><span>} </span></li> </ol> </div> <pre style="display: none;" class="java" name="code">class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url){ // 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边 view.loadUrl(url); return true; } }</pre> <p><br><br></p> <p align="left">(2)为WebView设置一个WebViewClient,并重写onPageStarted(WebView view, String url, Bitmap favicon)方法。</p> <div class="dp-highlighter bg_java"> <div class="bar"> <div class="tools"> <strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#"> view plain</a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#">copy</a><a class="PrintSource" title="print" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#">print</a><a class="About" title="?" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#">?</a> </div> </div> <ol class="dp-j"> <li class="alt"><span><span class="keyword">class</span><span> MyWebViewClient </span> <span class="keyword">extends</span><span> WebViewClient { </span></span></li> <li><span> </span></li> <li class="alt"><span> <span class="annotation">@Override</span><span> </span> </span></li> <li><span> </span></li> <li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> onPageStarted(WebView view, String url, Bitmap favicon) { </span></span></li> <li><span> </span></li> <li class="alt"><span> <span class="comment">// TODO Auto-generated method stub</span><span> </span></span></li> <li><span> </span></li> <li class="alt"><span> <span class="keyword">super</span><span>.onPageStarted(view, url, favicon); </span></span></li> <li><span> </span></li> <li class="alt"><span>} </span></li> <li><span> </span></li> <li class="alt"><span>} </span></li> </ol> </div> <pre style="display: none;" class="java" name="code">class MyWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // TODO Auto-generated method stub super.onPageStarted(view, url, favicon); } }</pre> <p><br><br></p> <p>这两种方法其实都是让参数view(WebView)加载参数url从而避免手机浏览器加载url,第一种方式更常用一些。</p> <p><em>2.但有些情况下 </em>我们可能想用WebView打开大部分链接,而有些链接我们希望调用手机浏览器来打开,我最近的一个项目中就有这样的需求。这样其实也很简单,我们只需要对上面第一种方法加以修改即可。</p> <div class="dp-highlighter bg_java"> <div class="bar"> <div class="tools"> <strong>[java]</strong> <a class="ViewSource" title="view plain" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#"> view plain</a><a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#">copy</a><a class="PrintSource" title="print" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#">print</a><a class="About" title="?" href="http://blog.csdn.net/chenshijun0101/article/details/7045145#">?</a> </div> </div> <ol class="dp-j"> <li class="alt"><span><span class="keyword">class</span><span> MyWebViewClient </span> <span class="keyword">extends</span><span> WebViewClient { </span></span></li> <li><span> </span></li> <li class="alt"><span> <span class="annotation">@Override</span><span> </span> </span></li> <li><span> </span></li> <li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">boolean</span><span> shouldOverrideUrlLoading(WebView view, String url) { </span></span></li> <li><span> </span></li> <li class="alt"><span> <span class="comment">// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边</span><span> </span></span></li> <li><span> </span></li> <li class="alt"><span> <span class="keyword">if</span><span> (openWithWevView(url)) { </span></span></li> <li><span> </span></li> <li class="alt"><span> view.loadUrl(url); </span></li> <li><span> </span></li> <li class="alt"><span> }<span class="keyword">else</span><span>{ </span> </span></li> <li><span> </span></li> <li class="alt"><span> Uri uri = Uri.parse(url); <span class="comment"> //url为你要链接的地址</span><span> </span></span></li> <li><span> </span></li> <li class="alt"><span> Intent intent =<span class="keyword">new</span><span> Intent(Intent.ACTION_VIEW, uri); </span></span></li> <li><span> </span></li> <li class="alt"><span> startActivity(intent); </span></li> <li><span> </span></li> <li class="alt"><span> } </span></li> <li><span> </span></li> <li class="alt"><span> <span class="keyword">return</span><span> </span> <span class="keyword">true</span><span>; </span></span></li> <li><span> </span></li> <li class="alt"><span>} </span></li> </ol> </div> <pre style="display: none;" class="java" name="code">class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边 if (openWithWevView(url)) { view.loadUrl(url); }else{ Uri uri = Uri.parse(url); //url为你要链接的地址 Intent intent =new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } return true; }</pre> <p><br><br></p> <p>其中openWithWevView(url)是自己写的一个方法,用来判断是否用WevView打开该链接。</p> <p></p> </wbr>
分享到:
评论

相关推荐

    android webview的用法总结

    android webview的用法总结

    Android WebView播放视频(包括全屏播放)

    Android WebView播放视频开发中总结的一些经验,希望同大家分享,这个是相应的Demo,一些经验和注释都在代码中写到。

    Android WebView总结

    NULL 博文链接:https://332461118-qq-com.iteye.com/blog/1559863

    Android_WebView安全攻防指南2020.pdf

    1.WebView攻击⾯ 2.WebView配置与使⽤ 3.WebViewURL校验 4.WebView安全防御 5.总结 WebView已成为Android ...通过本演讲,开发者能了解到Android WebView最新的典型漏洞类型及其利用手法,从而获得安全编程方面的指南。

    androidWebView学习小结

    最近半年在做android开发,借鉴大牛和自己总结的一些经验,分享出来

    android webview播放网页视频

    在网上找了太多webview播放网页视频的代码,太乱了,总结完了写了一个最最简单的demo 可以拿去参考 注意事项 在avtivity上面有

    Android中WebView返回到上一个网页

    最近写项目,有个功能是webView中的网页返回到上个页面,我在网上找了一下,总结了一下,把demo上传到这,和大家分享学习

    Android webview使用方法总结

    主要介绍了Android webview使用方法总结的相关资料,需要的朋友可以参考下

    android webView js方法和java交互例子源码

    android webView js方法和java交互例子源码和总结,自己亲自实践的小例子,分享给大家

    Android WebView的使用方法总结

    Android WebView的使用方法  Android app打开H5页一般要实现如下需求: 1、打开指定url网页; 2、点击链接可以跳转到下一页,并更新标题; 3、按back键或左箭头可以返回上一页; 4、当webview显示的是第一级url时...

    android项目中在webview中打开pdf

    android项目中在webview中打开pdf。 关于android打开pdf文件方法有多种,下面的文章有详细说明: Android 实现 PDF 文件阅读功能调研 Android 使用PDF.js浏览pdf的方法示例 android:加载PDF几种方法汇总对比  总结...

    Android编程实现WebView自适应全屏方法小结

    主要介绍了Android编程实现WebView自适应全屏方法,结合实例形式总结了三种常用的WebView自适应全屏实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    Android WebView或手机浏览器打开连接问题解决办法总结

    主要介绍了Android WebView或手机浏览器打开连接问题解决办法总结的相关资料,需要的朋友可以参考下

    Android WebView H5 秒开方案总结.zip

    方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。...

    Android如何让WebView中的HTML5页面实现视频全屏播放

    本文主要是将最近工作中遇到的一个问题进行总结分享,主要介绍的是如何让WebView中H5页面全屏播放视频。关于这个问题,做一下简单分析,希望对大家有所帮助,下面话不多说了,来看看详细的介绍吧。 效果图 运行效果...

    Android中webview使用的一些坑

    主要给大家介绍了关于Android中webview使用的一些坑,通过一下总结的这些内容,对大家学习或者使用webview具有一定的参考学习价值,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

    androidwebView

    andooid开发中,webView的实现,是我学习中总结的

Global site tag (gtag.js) - Google Analytics