我正在开发一个显示HTML页面某些部分的Android应用程序。第一步,我使用问题How to retrieve HTML content from WebView中提供的代码。
/* 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");
答案 0 :(得分:1)
一个简单的解决方案可能是在webview中注入自定义css代码,改变你想要“单独”显示的HTML元素的样式。
你应该注入这样的css:
#central-box {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 100%;
// depends on the structure of the page
}
有关如何操作的示例,另请参阅in this answer。
答案 1 :(得分:1)
我能想到至少有三种方法可以做到这一点,而且你真的很接近所有这些方法:
这就是为什么,直接来自SDK ...... ...&#34; onPageCommitVisible回调可用于确定使回收的WebView可见的安全点,确保不显示过时的内容。它最早被调用,可以保证onDraw(Canvas)将不再从先前的导航中提取任何内容。下一个绘图将显示WebView的背景颜色,或新加载页面的一些内容。&#34;它会在所有内容更新POST或GET上调用。
稍微好一点,您可以创建一个本地代理网页,其中包含javascript界面和其他有趣位,并存储为资源,如果您想要的内容被加载到全窗口iframe,您可以真正获得良好的控制,您可以使用onPageFinished与您的代理进行交互,因为它可以在iframe中使用onLoadResource与目标页面进行交互,使用旧的shouldInterceptRequest处理拦截,它返回WebResourceResponse并使用onFormResubmission处理POST驱动的更新。 / p>
最后,如果早于21的API支持不是一个大问题,最好的方法是使用新的shouldInterceptRequest,它接受新的WebResourceRequest对象,允许您为不同的请求类型指定不同的处理。 / p>
这里是新的WebResourceRequest对象的API链接和WebViewClient上的新的shouldInterceptRequest方法......
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)
希望有所帮助:)