• webview 与 javascript


    WebView不但可以运行一段html代码,而且还有一个最重要的特点,就是Webview可以同javascript互相调用。该类实现从android应用中调出个人资料,然后通过javascript显示出来。首先在android中定义一个PersonalData类,用例保存个人资料,并且定义得到这些数据的成员函数,供javascript调用。 

    package com.android;

    import android.app.Activity;
    import android.os.Bundle;
    import android.webkit.WebView;

    public class MainActivity extends Activity {
        private WebView mWebView;
        private PersonalData mPersonalData;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mPersonalData = new PersonalData();
            mWebView = (WebView)this.findViewById(R.id.webview);
            //设置支持javascript
            mWebView.getSettings().setJavaScriptEnabled(true);
            //把本类的一个实例添加到javascript的全局对象window中
            
    //这样就使用window.PersonalData来调用它的方法
            mWebView.addJavascriptInterface(this"PersonalData");
            //加载网页
            mWebView.loadUrl("file:///android_asset/PersonalData.html");
        }
        
        //在javascript脚本中调用得到PersonalData对象
        public PersonalData getPersonalData(){
            return mPersonalData;
        }
        
        //javascript脚本中调用显示的资料
        class PersonalData{
            String mId;
            String mName;
            String mAge;
            String mBolg;
            public PersonalData(){
                this.mId = "123456";
                this.mName = "Android";
                this.mAge = "24";
                this.mBolg = "http://bbs.csdn.net/";
            }
            public String getID()
            {
                return mId;
            }
            public String getName()
            {
                return mName;
            }
            public String getAge()
            {
                return mAge;
            }
            public String getBlog()
            {
                return mBolg;
            }
        }

    }

    这里需要通过addJavascriptInterface(Object obj,String interfacename)方法将一个java对象绑定到一个javascript对象中,javascript对象名就是interfacename,作用域是global,这样便可以扩展javascript的api,获取android数据。

    初始化webview之后,在javascript中就可以使用window.Personal.gePersonalData()来取得java对象 

    PersonalData.html的内容: 

     <html>

        <head>
            <script type="text/javascript" src="test.js"/>
    </head>
    <body>
        <div id = "Personaldata">
            <p> Personal Data </p>
        </div>
    </body>
    </html>

     window.onload= function(){

        //取得java对象
        var personaldata = window.PersonalData.getPersonalData();
        if(personaldata)
        {
            var Personaldata = document.getElementById("Personaldata");
        pnode = document.createElement("p");
            //通过java对象访问其数据
            tnode = document.createTextNode("ID:" + personaldata.getID());
            pnode.appendChild(tnode);
            Personaldata.appendChild(pnode);
        pnode = document.createElement("p");
            tnode = document.createTextNode("Name:" + personaldata.getName());
            pnode.appendChild(tnode);
            Personaldata.appendChild(pnode);
        pnode = document.createElement("p");
            tnode = document.createTextNode("Age:" + personaldata.getAge());
            pnode.appendChild(tnode);
            Personaldata.appendChild(pnode);
        pnode = document.createElement("p");
            tnode = document.createTextNode("Blog:" + personaldata.getBlog());
            pnode.appendChild(tnode);
            Personaldata.appendChild(pnode);
        }    
    在java代码中也可以直接调用javascript方法,这样就可以互相调用取得数据了,代码如下:
    webview.loadUrl("javascript:方法名()");
    为了让WebView从apl文件中加载assets,android sdk提供了一个schema,前缀为"file:///android_asset/"。webview遇到这样的schema,就去当前包中的assets目录中找内容。所以我们使用了如下的代码来加载一个网页:

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

    转载:http://blog.csdn.net/llbupt/article/details/7369178 
     

  • 相关阅读:
    spark 随意笔记
    c#读取输入字符串,从数据源中查找以该字符串开头的所有字符串(使用正则表达式)
    我的收藏链接地址
    SQL查询时,遇到用到关键词作的字段。将该字段用一对中括号括起来[]
    SQL数据类型相互转换
    Javascript获取系统当前时间
    节点类型nodeType的取值
    混合布局编程挑战
    Webstorm破解方法
    二列布局
  • 原文地址:https://www.cnblogs.com/yourancao520/p/2549255.html
Copyright © 2020-2023  润新知