搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > Android高级进阶 > android中WebView和javascript实现数据交互实例

android中WebView和javascript实现数据交互实例

Android高级进阶 2017-11-01

这篇文章主要介绍了android中WebView和javascript实现数据交互实例,需要的朋友可以参考下

在看懂这篇文章之前首先要有javascript基础。

(1) js调用android的方法:

WebView wView;

wView. addJavascriptInterface (Object obj, String interfaceName);

是实例化一个对象,在html的js中调用,第二个参数是实例化对象的别名,如果要使用这个obj,则在js中使用的名字
就是interfaceName。

复制代码 代码如下:

public class jsWebDemo extends Activity {   

    WebView wView;    /** Called when the activity is first created. */  

    @Override  

    public void onCreate(Bundle savedInstanceState) {   

        super.onCreate(savedInstanceState);   

        setContentView(R.layout.main);    

        wView = (WebView)findViewById(R.id.wv1);   

       WebSettings wSet = wView.getSettings();   

        wSet.setJavaScriptEnabled(true);
        ProxyBridge pBridge = new ProxyBridge();   

        wView.addJavascriptInterface(pBridge, "AliansBridge");   

        wView.loadUrl("file:///android_asset/index.html");   

    }   

 private class ProxyBridge {   

  public int one () {   

   return 1;   

  }   

 }   

}

来看一下index.html的内容:

复制代码 代码如下:

<html>

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

        /* This function is invoked by the activity */   

        function wave() {   

            alert("1");   

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

            alert("2");   

        }   

// --></mce:script><body>      <div id="output">Test page.</div><a onClick="window.demo.clickOnAndroid()">

 <div style="width:100px;              margin:0px auto;              padding:10px;              text-align:center;              border:2px solid #202020;" >  

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

                Click me!   

        </div>

 </a> <input type="submit" value="change to 1" onclick="document.getElementById('output').innerHTML =AliansBridge.one()" />      </body></html>

这里的AliansBridge即是调用的JAVA对象。
要注意的是,如果你只有一个方法需要被js调用只new一个对象就行:
ProxyBridge pBridge = new ProxyBridge();
wView.addJavascriptInterface(pBridge, "AliansBridge");
如果你需要调用好多个方法,就要把整个android程序所在的类本身实例化传递进去:
wView.addJavascriptInterface(this, "AliansBridge");
(2) android调用js的方法:wView.setWebChromeClient (WebChromeClient client)
要用到Handler更新UI,Handler mHandler = new Handler();

复制代码 代码如下:

mWebView.setWebChromeClient(new MyWebChromeClient());                

    mWebView.addJavascriptInterface(new Object(){    /**      

     * This is not called on the UI thread. Post a runnable to invoke      

     * loadUrl on the UI thread.      

     */        

    public void clickOnAndroid() {        

        mHandler.post(new Runnable() {         

            public void run() {         

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

            }         

        });                 

    } 

 }, "demo");

同理,在html中必须有一个名为demo的对象调用clickOnAndroid()方法。

复制代码 代码如下:

/**      

 * Provides a hook for calling "alert" from javascript. Useful for      

 * debugging your javascript.      

 */        final class MyWebChromeClient extends WebChromeClient {         

    @Override     

    public boolean onJsAlert(WebView view, String url, String message,                  JsResult result) {                      

        result.confirm();       

    return super.onJsAlert(view, url, message, result);                        

    } 

}


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《android中WebView和javascript实现数据交互实例》的版权归原作者「Android高级进阶」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注Android高级进阶微信公众号

Android高级进阶微信公众号:IT_COMMUNICATION

Android高级进阶

手机扫描上方二维码即可关注Android高级进阶微信公众号

Android高级进阶最新文章

精品公众号随机推荐