android把js的注入和方法统一管理,android WebView 注入js 几种方式

有时我们开发中需要将js 注入到我们本地,有可能你会说,放在Web不就可以了吗,的确,但是需求就是这样的

通过流的形式注入

@SuppressLint("ObsoleteSdkInt")

public void onJsLocal() {

StringBuilder builder = new StringBuilder(getJS(this, "qqq.js"));

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {

agentWeb.getWebCreator().getWebView() .loadUrl("javascript:" + builder.toString());

} else {

agentWeb.getWebCreator().getWebView().evaluateJavascript(builder.toString(), new ValueCallback() {

@Override

public void onReceiveValue(String value) {

Log.i("onReceiveValue", value);

}

});

}

}

第二种 通过文件加载

view.loadUrl("javascript:(function() { "

+ " " //turns to red the background color

+ " var script=document.createElement('script'); "

+ " script.setAttribute('type','text/javascript'); "

+ " script.setAttribute('src', 'http://192.168.12.2/assets/mathjax/jsBridge.js'); "

+ " script.onload = function(){ "

+ " console.log('aaaaaaaa' ) ; "

+ " }; "

+ " document.getElementsByTagName('head')[0].appendChild(script); "

+ "})()");

第三种,第二种有可能存在加载不成功的情况,我们可以拦截

Map map = new HashMap<>();

map.put("Access-Control-Allow-Origin", "*");

map.put("Access-Control-Allow-Headers", "Content-Type");

WebResourceResponse resourceResponse = new WebResourceResponse("application/javascript",

"UTF-8", 200, "OK", map,

getApplication().getAssets().open(JS_FILENAME));

注意由于注入是一个异步的操作,所以和js交互的过程有可能存在不顺畅的问题

可以采用

view.postDelay ...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值