webview加载html代码-Android—–WebView使用

大部分内容是根据网上其他高级帖子编译的,仅供查看:

Android手机内置了高性能的webkit内核浏览器,并作为一个组件封装在SDK中,称为WebView。

什么是 webkit

WebKit是MacOSXv10.3及以上版本中包含的软件框架(v10.2.7及以上版本也可以通过软件更新获得)。 同时,WebKit也是MacOSX的Safari网络浏览器的基础。 WebKit是一个开源项目,主要修改自KDE的KHTML,并包含一些来自Apple的组件。

传统上,WebKit包括网页引擎WebCore和脚本引擎JavaScriptCore,分别对应KDE的KHTML和KJS。 不过,随着 JavaScript 引擎越来越独立,WebKit 和 WebCore 现在基本上可以互换使用(例如 Google Chrome 和 Maxthon 3 使用 V8 引擎,但仍然坚持认为自己是 WebKit 核心)。

到这里我们初步体验了在android上使用webview浏览网页。 SDK的DevGuide中有一个WebView的简单示例。

开发过程中应注意以下几点:

1、AndroidManifest.xml中必须使用“android.permission.INTERNET”权限,否则会出现Webpagenotavailable错误。

2. 如果您访问的页面包含Javascript,则必须将webview设置为支持Javascript。

webview.getSettings().setJavaScriptEnabled(true);

3、如果页面中有链接,如果想点击该链接并继续在当前浏览器中响应,而不是在新打开的Android系统浏览器中响应该链接,则必须重写webview的WebViewClient对象。

mWebView.setWebViewClient(newWebViewClient(){publicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){view.loadUrl(url);returntrue;}});

加载代码英文怎么说的_webview加载html代码_加载代码跳转执行

4、如果不做任何处理,浏览网页后点击系统“后退”按钮,整个Browser会调用finish()自行结束。 如果你想让正在浏览的网页返回而不是启动浏览器,你需要在当前的Activity中处理并消费它。 摆脱背部的混乱。

 public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode==KeyEvent.KEYCODE_BACK)
        {
            if(webView.canGoBack())
            {
                webView.goBack();//返回上一页面
                return true;
            }
            else
            {
                System.exit(0);//退出程序
            }
        }
        return super.onKeyDown(keyCode, event);
    }

接下来我们看看android中的webview是如何支持javascripte自定义对象的。 在w3c标准中,js有window、history、document等标准对象,同样,我们在开发浏览器调用移动系统时也可以自己定义我们的对象。 函数来处理它,这样你就可以使用js做任何你想做的事情。

让我们看一个例子:

viewplaincopytoclipboardprint?publicclassWebViewDemoextendsActivity{privateWebViewmWebView;privateHandlermHandler=newHandler();publicvoidonCreate(Bundleicicle){super.onCreate(icicle);setContentView(R.layout.webviewdemo);mWebView=(WebView)findViewById(R.id.webview);WebSettingswebSettings=mWebView .getSettings();webSettings.setJavaScriptEnabled(true);mWebView.addJavascriptInterface(newObject(){@JavascriptInterface

publicvoidclickOnAndroid(){mHandler.post(newRunnable(){publicvoidrun(){mWebView.loadUrl("javascript:wave()");}});}},"演示");mWebView.loadUrl("file:// /android_asset/demo.html");}}

让我们看一下 addJavascriptInterface(Objectobj,StringinterfaceName) 方法,该方法将 java 对象绑定到 javascript 对象。 javascript 对象名称是interfaceName (demo)webview加载html代码,范围是Global。 这样初始化webview后webview加载html代码,就可以在webview加载的页面中通过javascript:window.demo直接访问绑定的java对象了。 我们看看html中是如何调用的。

确定页面加载过程

    webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                // TODO Auto-generated method stub
                if (newProgress == 100) {
                    // 网页加载完成
                } else {
                    // 加载中
                }
            }
        });

缓存使用情况

webview加载html代码_加载代码英文怎么说的_加载代码跳转执行

优先缓存

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

没有缓存:

webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

有几点需要注意:

加载代码英文怎么说的_加载代码跳转执行_webview加载html代码

1. 如果您访问的页面包含Javascript,则必须将webview设置为支持Javascript。

//启用支持javascript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);

2、4.2之前注入webview的对象暴露的接口没有@JavascriptInterface注解,但是4.2及以后版本需要@JavascriptInterface注解。

这样就可以在javascript中调用java对象的clickOnAndroid()方法了。 同样,我们可以在这个对象中定义很多方法(比如发送邮件、调用联系人列表等手机系统功能),这里的wave()方法是java中调用javascript的反例。

这里再补充几个知识点:

1)为了让WebView从apk文件加载资源,AndroidSDK提供了一个带有前缀“file:///android_asset/”的schema。 当WebView遇到这样的schema时,它会去当前包中的assets目录中查找内容。 如之前的“file:///android_asset/demo.html”

2)addJavascriptInterface方法中要绑定的Java对象和技术必须运行在另一个线程中,不能运行在构造它的线程中。 这也是使用Handler的目的。