2

我有一个应用程序,它具有以前存在的基于 Web 的注册过程,我试图在 WebView 中使用它。我需要在 html 中添加一些样式标签,以隐藏一些元素,以便更好地显示我的应用程序中的内容。我可以让它在初始加载时工作,但我不知道如何在 WebView 中从一页到下一页。这是我的工作:

在网站的初始加载时,我"<style>MY STYLES HERE<在调用之前获取原始 html 并将 /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”中做些什么来注入样式标签吗?或者如果没有,我还能尝试什么?

4

1 回答 1

0

我遇到了这个问题,并且根据重定向的数量等,我们无法始终使注入的 JavaScript 可用。

至少,您应该使用该wv.loadUrl("javascript:(function() { ... })()");方法,但同时在 onPageStarted() 和 onPageFinished() 中调用它。

根据页面的复杂性,您可能还需要在 onLoadResource() 中注入 JavaScript。

于 2012-09-19T17:11:01.567 回答