为了减少由于手机客户端的变更而造成的客户端反复更新,还是决定采用WebView+页面的展示方式来作为最终的方案。也与一些做手机应用开发的一些朋友咨询过,大概也是采用类似的思路。
采用WebView的方式有个比较关键的问题需要解决,就是页面与Andriod客户端进行交互,只有实现交互才可以更好的控制手机客户端与web服务器间的通讯,进行请求,应答的加密、压缩等等。
还是老办法,在google上百度一下,一切就是那么简单。引用下面一段代码,看一下就明白了
看我们的html文档:
Html代码
<html>
<script language="javascript">
/* This function is invoked by the activity */
function wave() {
alert("1");
document.getElementById("droid").src="android_waving.png";
alert("2");
}
</script>
<body>
<!-- Calls into the javascript interface for the activity -->
<a onClick="window.demo.clickOnAndroid()"><div style="width:80px;
margin:0px auto;
padding:10px;
text-align:center;
border:2px solid #202020;" >
<img id="droid" src="android_normal.png"/><br>
Click me!
</div></a>
</body>
</html>
再看我们的java 代码。
Java代码
public class WebViewDemo extends Activity {
private static final String LOG_TAG = ”WebViewDemo”;
private WebView mWebView;
private Handler mHandler = new Handler();
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
mWebView.setWebChromeClient(new MyWebChromeClient());
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), ”demo”);
mWebView.loadUrl(“file:///android_asset/demo.html”);
}
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {
}
/**
* This is not called on the UI thread. Post a runnable to invoke
* loadUrl on the UI thread.
*/
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
mWebView.loadUrl(“javascript:wave()”);
}
});
}
}
/**
* Provides a hook for calling ”alert” from javascript. Useful for
* debugging your javascript.
*/
final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(LOG_TAG, message);
result.confirm();
return true;
}
}
}
仔细分析一下,核心就下面两句代码:
在java中应用WebView的addJavascriptInterface方法,建立java实例与javascript对象之间的映射。如下:
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), ”demo”);
然后再javascript中通过window.demo直接进行java对象的访问。
其实,当我们看到这些方法的时候,只能感叹google的强悍!
转载自:http://softhood.net/cn/2010/06/30/
分享到:
相关推荐
Android WebView中客户端与JavaScript的基本交互 博客地址:http://blog.csdn.net/qq_25867141/article/details/50751354
webview中java与js安全交互 webview中java与js安全交互 webview中java与js安全交互 webview中java与js安全交互
Android加载assets里的html并实现WebView与JavaScript的交互
是关于webviewAPP的开发,实现网页js也客户端的交互以及videoview全屏播放,都是特别简单,有助于能看懂
通过 runJavaScript 实现 QML WebView 与 HTML的简单交互。对应博文 https://blog.csdn.net/weixin_43810973/article/details/84950203
Android 与Js交互的简单实现Demo 你们可以看看,必有收获
IOS加载bundle里的html并实现WebView与JavaScript的交互
仿天天动听用WebView实现的引导页面 网页 (Webview)
自己项目开发中使用的,需求是打通App和webview页面两者之间的数据交互 H5调用App的方法(反之App可以使用该页面的方法)
不仅winform方法能调用js方法,同时js方法能调用winform中的C#方法
解决RN 的 webview 组件不支持android客户端上传图片文件问题
Android 通过 WebView 与 js 交互实现图文混排, 解决图片适配屏幕问题与查看大图功能
WebView实现引导页面
webView与js的交互
Android中WebView与HTML+Javascript的交互 Android中WebView与HTML+Javascript的交互
解决react-native 的 webview 组件不支持android客户端上传图片文件问题
WebView常用方法和与JS交互
webview 监听页面显示事件,很好用
Andorid webview容器和Html里的js的交互通讯,轻松使用webview快捷开发