您的位置:首页 > 移动开发 > Android开发

Android实用方法—webview的JS交互

2015-06-15 15:36 477 查看
1、在android项目中,用webview加载html是经常出现的,如果html的内容无法响应application的话,那将会出现很多局限性,所以就有了webview与JS的交互,首先,是activity里面的webview与JS交互。在activity中为webview添加支持JS的代码:

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);的方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: