JavaScript与Android Native的交互
来源:互联网 发布:薪酬调查数据分析 编辑:程序博客网 时间:2024/04/19 18:11
JavaScript与Android Native的交互
- JavaScript与Android Native的交互
- 添加WebView到你的Android Application
- 在WebView中使用JavaScript
- JavaScript调用Android Native代码
- Android Native代码调用JavaScript代码
- 调试WebView
添加WebView到你的Android Application
首先在你的activity layout里面添加一个标签:
<?xml version="1.0" encoding="utf-8"?><WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
在activity里面加载一个WebView:
WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.loadUrl("http://www.example.com");//myWebView.loadUrl("file:///android_asset/index.html");
因为WebView需要访问网络,所以需要在Manifest文件中添加访问网络的权限:
<uses-permission android:name="android.permission.INTERNET" />
在WebView中使用JavaScript
默认情况下在WebVIew中是不能使用JavaScript的,如果想使用需要在WebView中添加一个设置:
WebView myWebView = (WebView) findViewById(R.id.webview);WebSettings webSettings = myWebView.getSettings();webSettings.setJavaScriptEnabled(true);
JavaScript调用Android Native代码
当WebView中的JavaScript代码需要调用Android Native代码,例如在WebView中点击一个按钮时需要在Android Native中显示一个Toast,而不是JavaScript中的alert。首先你需要定义一个类,如下:
public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** Show a toast from the web page */ @JavascriptInterface public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); } @JavascriptInterface public String modifyString(String inputString) { return inputString + " from Java side"; }}
在API 17之后需要调用的方法前加上一个annotation @JavascriptInterface
,否则在JavaScript中是调不到这个方法的。这是一个安全策略,否则Js可以调用Java对象方法,通过反射机制,Js可以直接获取Runtime,从而执行任意命令。
使用addJavascriptInterface()
将上述代码加到WebView中:
WebView webView = (WebView) findViewById(R.id.webview);webView.addJavascriptInterface(new WebAppInterface(this), "Android");//"Android"实在JavaScript中调用的名字
下面是WebView中调用该代码的例子:
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /><script type="text/javascript"> function showAndroidToast(toast) { Android.showToast(toast); var stringFromJava =Android.modifyString("string from javascript");//有返回值 }</script>
Android Native代码调用JavaScript代码
目前向JavaScript传递的参数只支持String类型,且不支持返回值。如果有返回的需求是需要在JavaScript中自己去主动调动用Android Native中的方法并将需要传入的值当做参数传入。
webView.loadUrl("javascript:document.getElementById(‘id’).innerHTML = ‘changed’ ");//操作DOM元素String mes="hello world";webView.loadUrl("javascript:window.Android.showToast("+ mes +")");webView.loadUrl("javascript:showAndroidToast("+ mes +")");
调试WebView
在Android4.4 KITKAT
之后支持调试WebView:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); }
0 0
- JavaScript与Android Native的交互
- Android中WebView的JavaScript-native交互
- android与javascript的交互
- android与javascript的交互
- Android 与JavaScript的交互
- Android--Native与html5交互
- Native通过Javascript与Html5交互
- Native通过Javascript与Html5交互
- Android--实现H5与Native交互的两种方式
- JavaScript 与 Android 交互
- JavaScript与Android交互
- Android与Javascript交互
- Android与Javascript交互
- Android与Javascript交互
- Android与javascript交互
- android与javascript交互
- android与javascript交互
- JavaScript与Android之间的交互
- 编译链接的整个过程
- C语言回调函数的使用
- HDU 5106 Bits Problem(数位DP->二进制大数模拟)@
- content-Type:text/plain和text/html
- Android进程保活招式大全
- JavaScript与Android Native的交互
- springMVC返回json数据乱码问题及@RequestMapping 详解
- Kemans算法及其Python 实现
- 开发感言
- Java对象转换(Map转换Object或者反转)
- JavaScript常用设计模式
- node.js 压缩混淆js代码
- IplImage简介
- avro反序列化