保存来自WebView的数据

我需要保存在WebView上显示的数据。 我已经实现了保存所有在WebViewClient中创build的URL请求并将其发送到后端服务。 后端服务稍后请求这些文件。

问题是WebViewClient正在运行它自己的循环,并且响应不可见,这导致我为每个资源发出两个请求。

有没有办法直接在WebViewClient内获取数据?

这是当前代码,这是工作:

private class Client extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { plainText = //get plain text and save it webView.loadDataWithBaseURL(url, plainText, MIME_TYPE_TEXT_HTML, UTF_8_ENCODING, null); return true; } @SuppressWarnings("deprecation") @Override public synchronized WebResourceResponse shouldInterceptRequest(WebView view, String url) { // we need to make sure it does nothing in this one for >= lollipop as in lollipop the call goes through both methods if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { return interceptRequest(view, url, null); } return null; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { WebResourceResponse response = super.shouldInterceptRequest(view, request); final String url = request.getUrl().toString(); return interceptRequest(view, url, response); } private WebResourceResponse interceptRequest(WebView webView, String url, WebResourceResponse webResourceResponse) { addUrlToDownloadQueue(url); return webResourceResponse; } 

addUrlToDownloadQueue(URL); 正在照顾,所有的url都通过服务,检索所有来源。

有没有办法获得WebViewClient上的数据,而不会传递给后端服务?

Solutions Collecting From Web of "保存来自WebView的数据"

你读过这个前面的问题吗?

如果你不能实现你的目标让我知道。

我张贴另一个答案,因为这个答案太长,以适应在评论。

那么,如果你不控制网页,那么这个问题就不好了。 事实上,正如在android开发人员指南中所说的:“小心:使用addJavascriptInterface()允许JavaScript来控制你的Android应用程序,这可能是一个非常有用的function或危险的安全问题当WebView中的HTML是不可信的(例如,或者所有的HTML都是由一个未知的人或进程提供的),那么攻击者可以包含执行你的客户端代码的HTML,也可能包含攻击者select的任何代码。

要获取网页中的数据,您可以使用webView.loadUrl(“javascript:document.getElementById(”example“)。value;”);

要从网页获取数据,请尝试引用此页面。

如果你需要更多的帮助联系我!

你可以试试这个,可能这个可以帮助你。

 public class TestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview); final WebView webview = (WebView) findViewById(R.id.browser); webview.getSettings().setJavaScriptEnabled(true); webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer"); webview.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webview.loadUrl("javascript:window.HtmlViewer.showHTML" + "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); } }); webview.loadUrl("http://android-in-action.com/index.php?post/" + "Common-errors-and-bugs-and-how-to-solve-avoid-them"); } class MyJavaScriptInterface { private Context ctx; MyJavaScriptInterface(Context ctx) { this.ctx = ctx; } public void showHTML(String html) { new AlertDialog.Builder(ctx).setTitle("HTML").setMessage(html) .setPositiveButton(android.R.string.ok, null).setCancelable(false).create().show(); } } } 

看到我的例子,提交前获取数据:
https://github.com/henrychuangtw/WebView-Javascript-Inject

并停止将数据传递到后端,在onsubmit函数中返回false

 webview1.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); StringBuilder sb = new StringBuilder(); sb.append("document.getElementsByTagName('form')[0].onsubmit = function () {"); sb.append("var objPWD, objAccount;var str = '';"); sb.append("var inputs = document.getElementsByTagName('input');"); sb.append("for (var i = 0; i < inputs.length; i++) {"); sb.append("if (inputs[i].type.toLowerCase() === 'password') {objPWD = inputs[i];}"); sb.append("else if (inputs[i].name.toLowerCase() === 'email') {objAccount = inputs[i];}"); sb.append("}"); sb.append("if (objAccount != null) {str += objAccount.value;}"); sb.append("if (objPWD != null) { str += ' , ' + objPWD.value;}"); sb.append("window.MYOBJECT.processHTML(str);"); sb.append("return true;"); //return false, to stop onsubmit function sb.append("};"); view.loadUrl("javascript:" + sb.toString()); } });