1

姜饼中的 WebViewClient 似乎有一个错误,我们依靠方法 boolean shouldOverrideUrlLoading(WebView view, String url) 将标头放回重定向和重新加载中。

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
     if (url.startsWith(URL.BASE_URL)) {
         view.loadUrl(url, RestClient.defaultHeaders);  
     }else {
         onExternalBrowserURL(url);
     }
    return true;
}

在 2.2 中 shouldOverrideUrlLoading 并不总是被调用,移动网站而不是 android 网站加载。

这里列出了错误 http://code.google.com/p/android/issues/detail?id=15612 见这里 2013 是最后一条评论 :( http://code.google.com/p/android/issues /detail?id=2887

有没有人有一个不涉及将所有 URL 更改为自定义 URL 方案或协议的解决方案?

谢谢

4

2 回答 2

1

shouldOverrideUrlLoading 仅被调用(取自 API 指南

当一个新的 url 即将被加载到当前的 WebView 中时

这意味着如果您将http://www.google.com加载到您的 WebView 中,然后再次加载它,第二次 shouldOverrideUrlLoading 将不会触发。这很烦人,因为如果不使用 HttpRequest 之类的东西自己下载网页,就无法为每个请求添加自定义标头。

我相信他们设计 shouldOverrideUrlLoading 主要是为了让 WebView 用户可以拦截对 youtube 等网站的第一个请求,然后将用户引导到应用程序而不是使用浏览器。遗憾的是,他们没有将其设计为用于添加标题。

我尝试了一段时间使用它在我的请求中添加一个 DO NOT TRACK 标头,除了由于上述原因每次都没有发送标头之外,loadUrl(url, header) 方法没有将标头放置在正确的位置和网站无法识别 DNT 标头。

tldr:没有

于 2013-07-29T16:23:40.637 回答
1

shouldOverrideUrlLoading加载类似的 url 时不调用

loadUrl("http://google.com");

或者如果浏览器像您提到的那样重定向网址。根据此页面,重定向不适用于 API 级别 11 及更低版本,但shouldOverrideUrlLoading如果您想获取您使用的 url,则不会调用所有版本loadUrl

您可以改用onPageStarted

于 2013-11-29T15:20:24.990 回答