zhongwuzw / WebBrowser

iOS浏览器 Web Browser for iOS
https://github.com/zhongwuzw/WebBrowser
MIT License
375 stars 92 forks source link

浏览器不能正确响应下载操作 #5

Open ghost opened 6 years ago

ghost commented 6 years ago

如果点击一个“可下载资源”的链接,浏览器不能下载相关资源。

zhongwuzw commented 6 years ago

下载的功能确实没有实现,可以考虑实现一下。

ghost commented 6 years ago

哈哈期待加入下载功能,同时还想请教一下实现的思路,想自己动手试试~。。~

zhongwuzw commented 6 years ago

思路就是,比如浏览器需要支持下载.zip文件,那么需要在 webView:shouldStartLoadWithRequest:navigationType:中判断navigationType类型,获取zipurl,拿到后就可以进行下载了,所以需要实现一个文件管理的界面,界面可以进行文件的管理,比如断点续传,删除等操作。

ghost commented 6 years ago

在webView:shouldStartLoadWithRequest:navigationType:中截取请求的链接,那我怎么知道那些链接是可下载的呢请问?

zhongwuzw commented 6 years ago

这个问题就需要看需求了,首先,如果只需要初步实现下载功能的话,可以简单的通过后缀名,比如url后缀为.zip,那么我们可以判断他应该是一个zip文件,直接通过URLSession下载下来即可。 不过并不是每一个文件的地址都包含文件扩展名,如果需要覆盖所有的情况,有两种方法,一种是单独开一个入口,让用户输入URL,然后从响应中获取文件的名字,类型等等,HTTPheader 中有Content-DispositionContent-Type等可以获取相关信息。另一种是创建NSURLProtocol来管理所有的请求,拿到响应后的操作和第一种一样。

ghost commented 6 years ago

你的意思是不是:一个链接在未加载之前是无法得知其是不是“可下载”的。要先加载它,然后拦截它的响应,从响应的header中获取到文件的类型(比如.zip),从而判断它是不是“可下载”。我理解的对吗

zhongwuzw commented 6 years ago

是的。

ghost commented 6 years ago

好的,谢谢谢啦。

zhongwuzw commented 6 years ago

忘了,还有一个方法忘说,通过私有方法来判断,- (void)webView:(id)arg1 decidePolicyForMIMEType:(id)arg2 request:(id)arg3 frame:(id)arg4 decisionListener:(id)arg5;,该方法会检测到不同的Mimetype,在这个方法可以处理不同的MimeType.

ghost commented 6 years ago

👍 这份文档也提到,可以在这个方法处理下载,感谢啦~~ http://doc.mbalib.com/view/241f5e4aee6b5172fa947819d8c95a67.html