android 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. [java] view plaincopyprint?
    mWebView.setWebViewClient(new WebViewClient(){

    public boolean shouldOverrideUrlLoading(WebView view, String url) {

    view.loadUrl(url);

    return true;

    }

    });

    mWebView.setWebViewClient(new WebViewClient(){

    public boolean shouldOverrideUrlLoading(WebView view, String url) {

    view.loadUrl(url);

    return true;

    }

    });

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

    [java] view plaincopyprint?
    public boolean onKeyDown(int keyCode, KeyEvent event) {

    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {

    mWebView.goBack();

    return true;

    }

    return super.onKeyDown(keyCode, event);

    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {

    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {

    mWebView.goBack();

    return true;

    }

    return super.onKeyDown(keyCode, event);

    }

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

    [java] view plaincopyprint?
    view plaincopy to clipboardprint?

    public class WebViewDemo extends Activity {

    private WebView mWebView;

    private Handler mHandler = new Handler();

    public void onCreate(Bundle icicle) {

    super.onCreate(icicle);

    setContentView(R.layout.webviewdemo);

    mWebView = (WebView) findViewById(R.id.webview);

    WebSettings webSettings = mWebView.getSettings();

    webSettings.setJavaScriptEnabled(true);

    mWebView.addJavascriptInterface(new Object() {

    public void clickOnAndroid() {

    mHandler.post(new Runnable() {

    public void run() {

    mWebView.loadUrl("javascript:wave()");

    }

    });

    }

    }, "demo");

    mWebView.loadUrl("file:///android_asset/demo.html");

    }

    }

    public class WebViewDemo extends Activity {

    private WebView mWebView;

    private Handler mHandler = new Handler();

    public void onCreate(Bundle icicle) {

    super.onCreate(icicle);

    setContentView(R.layout.webviewdemo);

    mWebView = (WebView) findViewById(R.id.webview);

    WebSettings webSettings = mWebView.getSettings();

    webSettings.setJavaScriptEnabled(true);

    mWebView.addJavascriptInterface(new Object() {

    public void clickOnAndroid() {

    mHandler.post(new Runnable() {

    public void run() {

    mWebView.loadUrl("javascript:wave()");

    }

    });

    }

    }, "demo");

    mWebView.loadUrl("file:///android_asset/demo.html");

    }

    }

  4. 我们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。www.cdtarena.com

    [html] view plaincopyprint?
    <html>

    <mce:script language="javascript"><!--

    function wave() {

    document.getElementById("droid").src="android_waving.png";

    }

    // --></mce:script>

    <body>

    <a onClick="window.demo.clickOnAndroid()">

    <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>

    Click me!

    </a>

    </body>

    </html>

    <html>

    <mce:script language="javascript"><!--

    function wave() {

    document.getElementById("droid").src="android_waving.png";

    }

    // --></mce:script>

    <body>

    <a onClick="window.demo.clickOnAndroid()">

    <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>

    Click me!

    </a>

    </body>

    </html> 
    这样在javascript中就可以调用java对象的clickOnAndroid()方法了,同样我们可以在此对象中定义很多方法(比 如发短信,调用联系人列表等手机系统功能。),这里wave()方法是java中调用javascript的例子。
    这里还有几个知识点:
    1)为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html" 
    2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的。

  5. 总结:
    1、添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
    2、在要Activity中生成一个WebView组件:WebView webView = new WebView(this);
    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:对网页中超链接按钮的响应。
    当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url 
    onLoadResource 
    onPageStart 
    onPageFinish 
    onReceiveError
    onReceivedHttpAuthRequest
    6、如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。
    覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。

    [java] view plaincopyprint?
    public boolean onKeyDown(int keyCoder,KeyEvent event){

    if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){

    webview.goBack(); //goBack()表示返回webView的上一页面

    return true;

    }

    return false;

    }

时间: 2024-10-07 18:43:45

android webView使用方法的相关文章

Android WebView 调试方法

调试Android WebView中的h5页面,通常就是通过alert和抓包工具来定位问题,效率低且无法直接调试样式或打断点,可谓是事倍功半.本文介绍一下我在项目中使用的新方法,能够通过chrome的开发工具在原生 Android 应用中调试 WebView. 前提条件: Android4.4+ 基本原理: 1.在APP中启用 WebView 调试,开启调试后,Chrome DevTools才能对WebView进行远程调试: WebView.setWebContentsDebuggingEnab

Android WebView问题汇总以及解决方法

Android WebView常见问题解决方案汇总: 1.Android webview背景设置为透明无效 webview是一个使用方便.功能强大的控件,但由于webview的背景颜色默认是白色,在一些场合下会显得很突兀(比如背景是黑色). 此时就想到了要把webview的背景设置为透明,这样就可以与其背景融为一体. 在2.X的平台下,一般设置webview背景为透明的方法如下: wvContent.setBackgroundColor(0); 但当程序在4.0上使用时,发现居然这种设置方法无法

WebView之js调用Android类的方法传递数据

1,具体的思路如下: 在android中写一个Activity,里面写一个webview,这个webview加载本地的一个html文件,显示这个网页,这个网页包括一个用户名和密码的输入框和两个按钮(只有登陆按钮有用),输入用户名密码之后调用android中的类,并把输入的数据传过去,再在android中输出出来(具体你那数据做什么操作就看你的需求了),这样就做大额js与android数据交互的效果了: 在android端,一些webviwe的设置和自定义类的写法如下源码: package com

webview中js调用Android中的方法

package com.example.helloworld; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.webkit.WebView; public class MainActivity extends Activity { private WebView webView = null

【Js】调用Android WebView定义的方法总结

先贴代码: package com.example.demowebview; import Android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.webkit.JAVAscriptInterface;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit

android webview loadData乱码问题解决方法

android webview loadData写成loadData(data, "text/html; charset=UTF-8", null);就不会乱码原因如下:乱码如果用 loadDataWithBaseURL时,如果不传入URL时,刷新会造成白屏,因为刷新时调用的的是reload方法,reload是根据传入的URL进行一次重新加载即再次loadUrl(url),不传入URL时,默认的的URL是about:blank 可以使用loadData,刷新只是从缓存里面取,但是在4.

android WebView详细使用方法(转)

1.最全面的Android Webview详解 2.最全面总结 Android WebView与 JS 的交互方式 3.你不知道的 Android WebView 使用漏洞

Android WebView 开发教程

1.WebView的使用 (a). 创建WebView的实例加入到Activity中 WebView webview = new WebView(this); setContentView(webview); 或者在xml中配置WebView <Webview android:layout_width="match_parent" android:layout_height="match_parent" > </Webview> (b). 访

屏蔽电信流氓广告造成的诡异的问题--Android WebView 长时间不能加载页面

发现在家里的时候用Android App里的WebView打开网站很慢,会有十几秒甚至更长时间的卡住. 但是在电脑上打开同样的网页却很快. 查找这个问题的过程比较曲折,记录下来. 抓取Android网络数据 为了调试这个问题,首先要抓取Android的网络包数据.开始时,是想用Wireshark来抓包的,但是很麻烦,tcpdump在手机要root权限. 于是转换思路,能不能在Android上设置代理,来抓包? 但是fiddler没有linux版本,于是转用BurpSuite了. 设置Androi