Android中 Js 扩展及交互
16lz
2021-01-25
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>
更多相关文章
- Android(安卓)M App 永久隐藏导航栏的Solution
- 实现Unity和Android进行交互
- Android(安卓)SurfaceFlinger VSync流程分析
- SEAndroid安全机制对Android属性访问的保护分析
- 一步步教你如何创建React Native的原生Android模块
- Android(安卓)GPIO LED 驱动与HAL分析
- Rexsee API介绍:Android传感器系列之 - 磁场传感器Magnetic Field
- android ---Using java surface on the native side
- 『ANDROID』App工程结构搭建:几种常见Android代码架构分析