Android实用方法—webview的JS交互
2015-06-15 15:36
477 查看
1、在android项目中,用webview加载html是经常出现的,如果html的内容无法响应application的话,那将会出现很多局限性,所以就有了webview与JS的交互,首先,是activity里面的webview与JS交互。在activity中为webview添加支持JS的代码:
然后给webview指定一个方法,供html调用,其中,open_view就是一个标识符,html识别app的标识符。
然后在activity中写一个方法,method也是一个标识符,可供html调用,str1是html传过来的参数,href是定义在html里面的,给app识别的标识符,然后在activity中响应html的动作跳转activity,并将str2传到另一个activity中,完成JS交互跳转activity的功能。
在JS中添加以下代码,.open_view是html里面的a标签,给a标签一个点击事件并执行app的函数,同时传参数。
最后记得在html中加上JS,即,
2、但一个界面不仅仅只有一个界面时,而是需要在一个activity里面切换多个界面时,则可以在activity里面添加多个fragment,然而,fragment虽然依赖与activity,但是却有着自己的生命周期,fragment中加载webview的JS交互不同与activity的JS交互,但是也大同小异。
在activity中写一个函数:
这里需要用到子线程,不然会报错,fragment与activity不同的是需要在activity找到fragment中的控件,找到控件之后,其他的交互的跟activity一样,记得线程最后得用i而不能用0。然后将这个方法写在每个fragment实例化之后,用show(i);的方式。
webview.getSettings().setJavaScriptEnabled(true);
然后给webview指定一个方法,供html调用,其中,open_view就是一个标识符,html识别app的标识符。
webview.addJavascriptInterface(DetailChoose.this, "open_view");
然后在activity中写一个方法,method也是一个标识符,可供html调用,str1是html传过来的参数,href是定义在html里面的,给app识别的标识符,然后在activity中响应html的动作跳转activity,并将str2传到另一个activity中,完成JS交互跳转activity的功能。
public void method(String str1) { String str2 = "http://www.baidu.com" + str1; Intent intent = new Intent(); intent.putExtra("href", str2); intent.setClass(DetailChoose.this, Goodsdetail.class); startActivity(intent); }
在JS中添加以下代码,.open_view是html里面的a标签,给a标签一个点击事件并执行app的函数,同时传参数。
if_open = typeof(open_view); if(if_open != "undefined") { $('.open_view').click(function(){ open_view.method($(this).attr('href')); return false; }) }
最后记得在html中加上JS,即,
<script type="text/javascript" src="js/js.js"></script>
2、但一个界面不仅仅只有一个界面时,而是需要在一个activity里面切换多个界面时,则可以在activity里面添加多个fragment,然而,fragment虽然依赖与activity,但是却有着自己的生命周期,fragment中加载webview的JS交互不同与activity的JS交互,但是也大同小异。
在activity中写一个函数:
public void show(final int i) { new Handler().postDelayed(new Runnable() { @SuppressLint("NewApi") @Override public void run() { switch (i) { case 0: webview = (WebView) synthesizeFragment.getView().findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.addJavascriptInterface(ThreeActivity.this, "open_goods"); break; case 1: webview1 = (WebView) chooseFragment.getView().findViewById(R.id.webview); webview1.getSettings().setJavaScriptEnabled(true); webview1.addJavascriptInterface(ThreeActivity.this, "open_goods"); break; default: break; } } }, i); }
这里需要用到子线程,不然会报错,fragment与activity不同的是需要在activity找到fragment中的控件,找到控件之后,其他的交互的跟activity一样,记得线程最后得用i而不能用0。然后将这个方法写在每个fragment实例化之后,用show(i);的方式。
相关文章推荐
- GitHub 优秀的 Android 开源项目
- Android开源项目—Zxing的使用
- Android学习笔记——Bundle
- Android ViewPager 引导页的一种效果
- Android自定义View—NumberPicker的使用
- Android自定义AlertDialog去掉黑边的方法
- Intel 英特尔之开发人员专区 ------Android 开发之Android 应用程序如何调用支付宝接口
- 关于在TextView中设置DrawableLeft的问题
- Android自定义View—HorizontalSlideDeleteListView
- Android自定义View—SildeMenu
- android 开发环境的搭建
- Android整机源码如何轻松下载?清华大学Android源码镜像
- Android自定义View—侧边栏菜单
- Android自定义View—自定义的DatePicker
- androidの监听EditView中的文本TextWatcher
- Android ViewDragHelper 实现 QQ5.0 侧滑
- Openfire + Smack 4.1.1 搭建Android聊天平台
- Android实用方法—返回键的监听
- Android优化系列——性能优化(资源存储)
- Android自定义View的实现方法,带你一步步深入了解View(四)