android webview修改js,Android WebView通过动态的修改js去拦截post请求参数实例

本文介绍了如何在Android WebView中拦截并修改POST请求参数。由于页面不可修改,作者提供了两种解决方案:一是通过JavaScript修改按钮点击事件,动态加载JS代码;二是原生Android方式,拦截资源,下载并修改JS,然后加载到本地。这两种方法都需要与前端配合,以实现对POST请求数据的拦截和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求背景:

需要在用户点击提交按钮的时候拦截用户提交的数据。

遇到的问题:

1.页面不是自家前端做的,不能修改网页中的代码

2.要拦截的请求不是get请求,而是一个post请求 (难点在于:如果拦截的请求是get请求的话,我只需要拿到url,将后面拼接的参数键值对取出来就好了,但是post请求的参数键值对我们是看不到的。。。)

解决重点:

重写webViewClient的shouldInterceptRequest这个方法

1.这个方法是API21以后才出现的,还有一个过时的方法也要重写,不要忘了!

2.在加载网页时,所有的资源都会经过shouldInterceptRequest这个方法,我们可以通过shouldInterceptRequest和抓包工具(Fidder,Charles)去获取你想要获取信息的网址和资源文件

3.这个方法是执行在子线程的,如果你想要更新UI的话,记得切换线程

解决方案:

我这里找到了两种解决方案(总有一款适合你)

方案A : 适合 精通js 的大大们

1.拦截页面上按钮的点击事件,将点击事件的操作进行替换

$('#J_submit').off('click'); //1.将id为J_submit的按钮点击事件关闭

$('#J_submit').on('click',function(){ //2.将id为J_submit的按钮点击事件重新打开,并执行function里的内容

if ($(this).hasClass("btn-disabled")) { // ----- 此处为原页面代码,不做解释 -----

return;

}

try {

trackDealerEvent('dlr_order_page_form_submit_click', {

'esfrom': _mediaId,

'business': 'songshu',

'series': _seriesId,

'city': _cityId

});

} catch (e) {

console.log(e);

} // ----- 此处为原页面代码,不做解释 -----

var pageFormData = validateAllField(alertDiv);

if (pageFormData) { //3.获取到页面内的数据

$.ajax({ //4.ajax方式上传到服务器中

url: 'https://gouche.jxedt.com/gouche/clue/submit',

data: {

cityid: _cityId,

brandid: _brandId,

seriesid: _seriesId,

classesid: _specId,

name: $("[name='userName']").val(),

phone: $('#phoneNumber').val(),

type: 4

}

});

postOrder(pageFormData);

}

})

2.动态的加载一段js代码

mCommonWebView.setCommonWebViewClient(new CommonWebViewClient() { //添加自定义的 WebViewClient

@Override

public void onPageFinished(WebView view, String url) { //重写onPageFinished方法

super.onPageFinished(view, url);

//请求js的网址

runRemoteJs(Constant.QueryCarPrice.loadJsUrl_CarHome);

}

private void runJs(String remoteJs){ //把获取到的js代码添加到当前网页

if(TextUtils.isEmpty(remoteJs)) {

return;

}

String js = "javascript:"; //作用:指明字符串后面的都是js代码

js+= "var script = document.createElement('script');"; // 作用:创建script节点

js+= "script.type = 'text/javascript';";

js+=remoteJs;

mCommonWebView.callJsFunction(js); //加载js代码

}

private void runRemoteJs(String url) {//前端大大提供的一个网址,网址里面就是上面的js代码,将网页中的代码获取下来

RxRequest request = new RxRequest()

.setUrl(url)

.setMethod(Request.Method.GET);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值