android WebView与js交互

最近项目中需要用到android和js的交互

 重点:必须和前端共同进行调试、参数定义一致(还有缓存特别严重,注意清除缓存)

1、初始化(看需求而定)

 

WebView wView = findViewById(R.id.web_view);
WebSettings webSettings = wView.getSettings();
//允许js弹窗
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setAllowFileAccess(true);
webSettings.setDefaultTextEncodingName("utf-8");
wView.setWebContentsDebuggingEnabled(true);
wView.getSettings().setTextZoom(100);

2、js调用android

//JavaScriptinterface类名 iceAndroid变量名必须和js一致,注意缓存

wView.addJavascriptInterface(new JavaScriptinterface(), "iceAndroid");//这个方法要放在加载loadUrl之前调用
public class JavaScriptinterface {
    /**
     * 与js交互时用到的方法,在js里直接调用的
     */
    @JavascriptInterface
    public void showToast(String s) {
        Toast.makeText(TicketWVActivity.this, s, Toast.LENGTH_LONG).show();
    }
}

3、android向js传值

wView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);

    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);

        wView.post(new Runnable() {
            @Override
            public void run() {
		//javascript这个是固定的,getFromAndroid()可以传无参也可以有参,注意'""'的拼接,必须js的方法一致
		//signData(venueId)这个是我这边转的json的方法,
                wView.loadUrl("javascript:getFromAndroid('" + signData(venueId) + "')");
            }
        });
    }
});

判断webview的返回上一级

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && wView.canGoBack()) {
        wView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

android 在js界面弹窗:

//必须要开子线程,然后主线程进行更新
TicketWVActivity.this.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        if (jsCommentOrderBean.getTelephone() != null) {
            //popwindow telephone是js传递过来的手机号,我这边弹窗拨打电话
            showPhonePopwindow(jsCommentOrderBean.getTelephone());
        }
    }
});

 

 

清除缓存

@Override
protected void onDestroy() {
    super.onDestroy();
    //清空所有Cookie
    CookieSyncManager.createInstance(App.getAppContext());
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.removeAllCookie();
    CookieSyncManager.getInstance().sync();
    if (wView != null) {
        wView.setWebChromeClient(null);
        wView.setWebViewClient(null);
        wView.getSettings().setJavaScriptEnabled(false);
        wView.clearCache(true);
    }
}

 


 

 

省时、省力、可以直接用

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值