[英]How to retrieve and modify HTML content from WebView with Http Post
我正在开发一个显示 HTML 页面某些部分的 android 应用程序。 对于第一步,我使用问题如何从 WebView 检索 HTML 内容中提供的此代码。
/* An instance of this class will be registered as a JavaScript interface */ class MyJavaScriptInterface { @SuppressWarnings("unused") public void processHTML(String html) { // process the html as needed by the app } } final WebView browser = (WebView)findViewById(R.id.browser); /* JavaScript must be enabled if you want it to work, obviously */ browser.getSettings().setJavaScriptEnabled(true); /* Register a new JavaScript interface called HTMLOUT */ browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT"); /* WebViewClient must be set BEFORE calling loadUrl! */ browser.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { /* This call inject JavaScript into the page which just finished loading. */ browser.loadUrl("javascript:window.HTMLOUT.processHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); } }); /* load a web page */ browser.loadUrl("http://example.com/gethtml.html");
我能想到的至少有三种方法可以做到这一点,而且你真的很接近所有这些方法:
这就是为什么,直接来自 SDK ......” onPageCommitVisible 回调可用于确定使回收的 WebView 可见的安全点,确保不显示陈旧的内容。它在最早的点被调用可以保证 onDraw(Canvas) 不会再从以前的导航中绘制任何内容。下一次绘制将显示 WebView 的背景颜色,或新加载页面的一些内容。 ”它被调用内容更新 POST 或 GET。
稍微好一点,您可以创建一个本地代理网页,其中 javascript 界面和其他有趣的部分已经到位并存储为资源,如果您想要的内容加载到全窗口 iframe 中,您可以获得很好的控制,您可以交互使用 onPageFinished 代理,因为它在 iframe 中,您可以使用 onLoadResource 与目标页面交互,使用旧的 shouldInterceptRequest 处理拦截,它返回 WebResourceResponse 并使用 onFormResubmission 处理 POST 驱动的更新。
最后,如果 API 支持早于 21 不是一个大问题,最好的方法是使用新的 shouldInterceptRequest,它采用新的 WebResourceRequest 对象,允许您为不同的请求类型指定不同的处理。
这是新的 WebResourceRequest 对象和 WebViewClient 上新的 shouldInterceptRequest 方法的 API 链接...
http://developer.android.com/reference/android/webkit/WebResourceRequest.html
http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldInterceptRequest(android.webkit.WebView , android.webkit.WebResourceRequest)
希望有帮助:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.