【发布时间】:2012-09-19 17:03:53
【问题描述】:
我有一个应用程序,它具有以前存在的基于 Web 的注册过程,我试图在 WebView 中使用它。我需要在 html 中添加一些样式标签,以隐藏一些元素,以便更好地显示我的应用程序中的内容。我可以让它在初始加载时工作,但我不知道如何在 WebView 中从一页到下一页。这是我的工作:
在网站初始加载时,我获取原始 html 并在调用之前将 "<style>MY STYLES HERE</style>" 附加到字符串
wv.loadDataWithBaseURL(url, rawHtml, null, "UTF-8", url);
这很好用,但是如果用户单击页面上的链接并将另一个页面加载到 WebView 中,则不会调用此代码并且样式标记会丢失。
我假设我需要覆盖 WebViewClient 中的“shouldOverrideUrlLoading”,但我不知道如何从这里截取 html。我想我会尝试类似的东西:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String rawHtml = getRawHtml(url) + "<style>...</style>";
wv.loadDataWithBaseURL(url, rawHtml, null, "UTF-8", url);
}
但这显然会将其送入一个无限循环的拦截负载以开始新的负载。
我也尝试过覆盖 onPageFinished 并做:
wv.loadUrl("javascript:(function() { ... })()");
这是可行的,只是它会等到整个页面加载完毕后再执行。这会导致页面显示加载了所有的 UI 元素,然后我试图隐藏的所有元素突然消失。我的最终目标是在移动设备上增强网站的外观和感觉,所以这不是一个选择。
我可以在“shouldOverrideUrlLoading”中做些什么来注入样式标签吗?或者如果没有,我还能尝试什么?
【问题讨论】: