日期:2014-05-16  浏览次数:20396 次

关于Android中Java与Javascript之间的传值研究

?

Android中提供的WebView的功能不可谓不强大,并且WebView对于Javascript也能够很好的支持,Google官网也提供了在WebView中如何实现的JavaJavaScript的互相访问。来看一下源代码:

1 WebViewDemo.java文件:

?

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");
    }
}

?来分析一下这段代码:

WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
?首先生成一个WebSettings对象,其次setJavaScriptEnabled(true);通过这句声明使WebView能够支持JavaScript脚本。

紧接着mWebView.addJavascriptInterface这句,这个方法的原型如下:

addJavascriptInterface(Object obj,String interfaceName),该方法将一个java对象绑定到一个javascript对象中,而这个javascript对象的名字就是第二个参数interfaceName。这样在WebView进行初始化以后,就可以通过window. interfaceName来访问Java对象了。这里的interfaceName就是Demo

第一个参数则是个初始化了一个Java的类,注意这里的clickOnAndroid()方法,

这里文档里是这样描述的The Java object that is bound runs in another thread and not in the thread that it was constructed in.

也就是说addJavascriptInterface