【问题标题】:Inject Content into WebView Before Loading Url在加载 URL 之前将内容注入 WebView
【发布时间】: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”中做些什么来注入样式标签吗?或者如果没有,我还能尝试什么?

【问题讨论】:

    标签: android webview


    【解决方案1】:

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

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

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

    【讨论】:

    • 我尝试了 onLoadResource 并且它似乎可以工作,但它也消除了我想要的页面上一半的内容。我的代码是 wv.loadUrl("javascript:function() { document.getElementsByTagName('body')[0].innerHTML += ''; }()");你知道它为什么会这样吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多