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函數相互調用
publicclass WebViewDemo extends Activity { private WebView mWebView; private Handler mHandler = new Handler(); publicvoid 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可調用的介面 publicvoid 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>