我有一个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
内 - 不确定这是否正确。
任何帮助或其他方法都将不胜感激。
答案 0 :(得分:2)
onLoadResource()
不会触发,在这种情况下shouldOverrideUrlLoading()
也不会触发,这有点令人失望但我发现在WebView中,html页面中的所有请求都没有被触发(像图像,CSS等)。您有两种选择:
我曾经制作了一个需要缓存图像的RSS阅读器。我使用(2)方法并将所有img
源替换为本地资源。它虽然有效,但相当繁重。那时我只使用Simple Regex进行替换,但也可以使用像HTMLTidy这样的库来帮助你。