`
jiagou
  • 浏览: 2532449 次
文章分类
社区版块
存档分类
最新评论

Android中 Js 扩展及交互

 
阅读更多


Android中的JS扩展有2中方式:

1.利用webkit提供的js扩展接口在 java层扩展,直接由app实现
优点:容易
缺点:跟app耦合,其他app不能使用该js扩展
2.利用npapi在cpp层扩展
优点:所有app都能共享该扩展
缺点:相对有难度

引擎主要分为3大模块
1.webkit 平台相关代码,是对以下2模块的平台port封装
2.webcore 实现layout排版;渲染;当检测html中含有js脚本时交由jscore处理
3.javascriptcore/v8 解析js脚本,并执行

jscore跟webcore的交互 主要跟binding有关系。数据类型有map映射,一般的js扩展不涉及jscore的改动




通过Android webview实现与javascript函数相互调用



  • 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支持javascript
            mWebView.addJavascriptInterface(new Object() {  //添加javascript可调用的接口
                public
    void clickOnAndroid() {
                    mHandler.post(new Runnable() {
                        public void run() {
                            mWebView.loadUrl("javascript:wave()");
                        }
                    });
                }
            }, "demo");
            mWebView.loadUrl("file:///android_asset/demo.html");  //调用的网页
        }
    }
    
    
    demo.html:
    
    
    <html>
            <script language="javascript">
                    function wave() { //准备在activity里调用的函数
                        document.getElementById("droid").src="android_waving.png";
                    }
            </script>
            <body>
                <a onClick="window.demo.clickOnAndroid()"> //调用activity的clickOnAndroid()函数
                                    <imgid="droid"src="android_normal.png"/><br>Click me!
                </a>
            </body>
    </html>


    
    
    
    

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics