Webview资源侦听器未捕获加载的资源

时间:2011-03-02 00:15:33

标签: java android webview

我有一个webview应用程序,它监听点击并将它们与预定义的字符串进行比较,以检查是否需要挂钩我的Java。

我从明显开始:

shouldOverrideUrlLoading

并且在那里做了一些事情:

if(url.contains(myhook)){
   //do what i need 
}

这适用于在webview中处理用户点击时。但是现在我正处于需要捕获的情况下,如果资源加载了一个url。所以我找到了'onLoadResource'并认为这就是我想要的 - 但我无法让它发挥作用。

我的一般设置:

private String myhook = "http://domain.com/listener";
{ ... }
@Override
public void onLoadResource(WebView view, String url)
    {
    if(url.contains(myhook)){

        //do my stuff!!

        mWebView.loadUrl("http://domain.com/success.html");
    }
    else
    {
        super.onLoadResource(view, url);
    }           
}

我的网络代码(index.html):

{...}
<a href="http://domain.com/processing.php" >sign up</a>
{...}

调用我的php处理页面:

<?php
{...}
header('Location: http://domain.com/listener/?data=#data#');
?>

但我的钩子永远不会被调用,所以success.html永远不会被加载,我的“做我的东西”永远不会发生。它尝试将请求发送到不存在的http://domain.com/listener/?data=#data#(我只是使用它来获取#data#)。

有一点需要注意的是,我的“onLoadResource”位于我private class TestWebViewClient extends WebViewClient {之前的@Override public boolean shouldOverrideUrlLoading内 - 不确定这是否正确。

任何帮助或其他方法都将不胜感激。

1 个答案:

答案 0 :(得分:2)

onLoadResource()不会触发,在这种情况下shouldOverrideUrlLoading()也不会触发,这有点令人失望但我发现在WebView中,html页面中的所有请求都没有被触发(像图像,CSS等)。您有两种选择:

  1. 在html中注入Javascript,知道如何与Android Java进行通信。 http://developer.android.com/reference/android/webkit/WebSettings.html#setJavaScriptEnabled(boolean
  2. 预处理您的html页面,并用您想要的东西替换所有请求所需资源的部分。
  3. 我曾经制作了一个需要缓存图像的RSS阅读器。我使用(2)方法并将所有img源替换为本地资源。它虽然有效,但相当繁重。那时我只使用Simple Regex进行替换,但也可以使用像HTMLTidy这样的库来帮助你。