zoukankan      html  css  js  c++  java
  • WebView混合开发

    现在开发APP的方式变化,不在是传统的APP开发了,有很多的APP慢慢的转向混合模式的开发,使用WebView是传统开发模式转向混合模式的桥梁工具,结合了很多的Web前端开发界面,使得开发的速度加快,下面介绍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.  mWebView.setWebViewClient(new WebViewClient(){       
                  public boolean shouldOverrideUrlLoading(WebView view, String url) {       
                      view.loadUrl(url);//继续在当前WebView browser中响应       
                      return true;       
                  }       
              });

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

    1.  public boolean onKeyDown(int keyCode, KeyEvent event) {       
              if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {       
                  mWebView.goBack();//处理 WebView的返回       
                  return true;       
              }       
              return super.onKeyDown(keyCode, event);       
          } 

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

      看一个实例:

    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); //设置 WebView支持 界面中的JS      
            mWebView.addJavascriptInterface(new Object() {       
                public void clickOnAndroid() {       
                    mHandler.post(new Runnable() {       
                        public void run() {       
                            mWebView.loadUrl("javascript:wave()");//调用界面JS 的Function       
                        }       
                    });       
                }       
            }, "demo");       
            mWebView.loadUrl("file:///android_asset/demo.html"); //设置加载本地网页界面      
        }       

    我 们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在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的目的。

  • 相关阅读:
    第一周作业
    第八周作业
    第七周作业
    第五周作业
    第四周作业
    第三周作业
    第二周作业(markdown版本)
    第一周作业
    第六次作业
    第五周作业
  • 原文地址:https://www.cnblogs.com/timssd/p/5098399.html
Copyright © 2011-2022 走看看