WebView是否会执行Http获取并下载完整文件然后调用我的onDownloadStart()方法并且我的代码再次下载文件?
在Android应用程序中使用的WebView中,我们需要处理下载PDF文件。我看到了我觉得有意义的行为,但看起来很奇怪,所以我希望有人可以为我验证。
设置WebView时,我们调用setDownloadListener()并创建一个新的DownloadListener来处理onDownloadStart()方法调用。在onDownloadStart()方法中,我们使用HttpURLConnection从我们的Web服务器获取资源。
在网络跟踪中,我看到为同一资源执行了两个Http Get请求。我假设这是因为webview首先对资源进行了Get,然后webview执行自己的处理并确定它无法呈现资源。然后webview调用onDownloadStart()方法,我们第二次检索资源。
SetDownloadListener的文档说:
注册无法处理内容时要使用的界面 渲染引擎,应该下载。这将 替换当前的处理程序。
webview不知道它是否可以呈现资源,直到它从服务器获得响应并且可以读取返回的内容类型。因此,它必须首先执行GET或HEAD来读取响应头。因此,双重下载行为似乎有意义。
并且,一些跟进问题:
答案 0 :(得分:1)
当你的 3的答案开始时它会更好。问题:强>
我认为WebView对所有Ressources使用GET方法。只有在获得此请求的第一个http标头后,WebView才会检查是否有标题告诉"进行下载"
(例如Content-Disposition: Attachment; filename=example.html
之类的标题)
如果没有指向下载的标题,WebView将在其视图中显示加载和内容。
如果有下载标题,则会调用 onDownload
(即使其值设置为"内联")。
回答问题2 :
我认为在这种情况下,webview不会加载内容的内容。 目前我不知道重用现有请求的方法。
回答问题4
如果你覆盖shouldInterceptRequest
就像在这个例子中一样:https://stackoverflow.com/a/29811280/2377961 你可以改变这种行为。