android自动化robium,Android WebView

WebView内存泄漏

private void initView() {

LinearLayout llRoot = findViewById(R.id.ll_root);

wvShow = new WebView(getApplicationContext());

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

wvShow.setBackgroundColor(ContextCompat.getColor(this, R.color.white));

llRoot.addView(wvShow,params);

}

private void setupView() {

WebSettings settings = wvShow.getSettings();

settings.setJavaScriptEnabled(true);

settings.setAllowUniversalAccessFromFileURLs(true);

settings.setDefaultTextEncodingName("utf-8");

String url = "";

wvShow.loadUrl(url);

}

@Override

protected void onDestroy() {

if (wvShow != null) {

ViewParent viewParent = wvShow.getParent();

if (viewParent != null){

((ViewGroup)viewParent).removeView(wvShow);

}

wvShow.stopLoading();

wvShow.getSettings().setJavaScriptEnabled(false);

wvShow.clearHistory();

wvShow.removeAllViews();

wvShow.destroy();

}

super.onDestroy();

}

解决跨域的问题

报错:XMLHttpRequest cannot load http://www.xx.com/xx. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'null' is therefore not allowed access."

Android端:

WebSettings settings = wvShow.getSettings();

settings.setJavaScriptEnabled(true);

settings.setAllowUniversalAccessFromFileURLs(true); // 跨域

settings.setDefaultTextEncodingName("utf-8");

wvShow.loadUrl("http://www.xx.com/");

ajax请求

$.ajax({

url : path,

type: "POST",

crossDomain: true, // 跨域配置

xhrFields: {

withCredentials: true //发送凭据

},

success : function(result) {

alert("success");

}

});

php 允许所有域名访问

header('Access-Control-Allow-Origin:*'); //跨域访问

header("Access-Control-Allow-Credentials: true"); //允许跨域请求中携带cookie

// 服务器端 Access-Control-Allow-Credentials = true时,参数Access-Control-Allow-Origin 的值不能为 '*'

参考:

Android WebView获取网页数据

/**

* webview加载网页url

*/

private void LoadAuthPageUrl() {

String url = "xxxxxx";

wbAuth.setWebChromeClient(new WebChromeClient(){

[@Override](https://my.oschina.net/u/1162528)

public void onReceivedTitle(WebView view, String title) {

super.onReceivedTitle(view, title);

Log.d(TAG, "==" + title);

}

});

wbAuth.setWebViewClient(new WebViewClient(){

[@Override](https://my.oschina.net/u/1162528)

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

view.loadUrl("javascript:(function() { " + jsFormInjectCode + "})()"); //注入javascript

}

[@Override](https://my.oschina.net/u/1162528)

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

return true;

}

[@Override](https://my.oschina.net/u/1162528)

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

super.onReceivedError(view, errorCode, description, failingUrl);

Log.d(TAG, "==" +errorCode + "=" + description + "=" +failingUrl);

}

});

// 将FormDataInterface类中的processFormData方法映射到javascript中的window.FORMOUT.processFormData(data);

wbAuth.addJavascriptInterface(new FormDataInterface(), "FORMOUT");

WebSettings settings = wbAuth.getSettings();

settings.setJavaScriptEnabled(true); // 支持javascript

settings.setDefaultTextEncodingName("utf-8");

wbAuth.loadUrl(url); // 加载网页url

//wbAuth.loadDataWithBaseURL(url, data, "text/html", "utf-8", null); // 直接加载html字符串,第一个url是html种资源获取的根路径

}

/**

* javascript的交互类

*/

private class FormDataInterface {

@JavascriptInterface

public void processFormData(String formData) {

// 获取到的值:

// method=post&action=xx&response_type=code&redirect_uri=xxx&username=xxx&password=xxx

Log.d(TAG, "====" + formData);

}

}

// 注入的javascript代码

String jsFormInjectCode =

"function parseForm(event) {" +

" var form = this;" +

" if (this.tagName.toLowerCase() != 'form')" +

" form = this.form;" +

" var data = '';" +

" if (!form.method) form.method = 'get';" +

" data += 'method=' + form.method;" +

" data += '&action=' + form.action;" +

" var inputs = document.forms[0].getElementsByTagName('input');" +

" for (var i = 0; i < inputs.length; i++) {" +

" var field = inputs[i];" +

" if (field.type != 'submit' && field.type != 'reset' && field.type != 'button')" +

" data += '&' + field.name + '=' + field.value;" +

" }" +

" window.FORMOUT.processFormData(data);" +

"}" +

"" +

"for (var form_idx = 0; form_idx < document.forms.length; ++form_idx)" +

" document.forms[form_idx].addEventListener('submit', parseForm, false);" +

"var inputs = document.getElementsByTagName('input');" +

"for (var i = 0; i < inputs.length; i++) {" +

" if (inputs[i].getAttribute('type') == 'button')" +

" inputs[i].addEventListener('click', parseForm, false);" +

"}";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值