Android WebView通过动态的修改通过动态的修改js去拦截去拦截post请求参数实例请求参数实例
主要介绍了Android WebView通过动态的修改js去拦截post请求参数实例,具有很好的参考价值,希望对大家有
所帮助。一起跟随小编过来看看吧
需求背景需求背景:
需要在用户点击提交按钮的时候拦截用户提交的数据。
遇到的问题遇到的问题:
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的网址