webview的JS交互

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);的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值