我有一个应用程序,其中包含以前存在的基于Web的注册过程,我尝试在WebView中使用该过程。我需要在html中添加一些样式标签,以隐藏一些元素,以便更好地显示我的应用程序内的内容。我可以让它在初始加载时工作,但我无法弄清楚如何从WebView中的一个页面到下一个页面。这就是我的工作:
在初次加载网站时,我会在调用
之前获取原始html并将"<style>MY STYLES HERE<
/ style&gt;“附加到字符串中
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”中注入样式标签吗?或者如果没有,我还能尝试什么?
答案 0 :(得分:0)
我遇到了这个问题,并且根据重定向的数量等,我们无法一直提供注入的JavaScript。
至少,你应该使用wv.loadUrl("javascript:(function() { ... })()");
方法,但是在onPageStarted()和onPageFinished()中调用它。
根据页面的复杂程度,您可能还需要在onLoadResource()中注入JavaScript。