我正在开发一个需要从链接下载网页源代码的应用程序,其中包含所有内部文件,如图像、css、javascript。
之后,我需要在 WebView 中以离线模式打开此 html,这就是我需要从页面下载所有内容的原因。
我会使用 JSOUP 下载图像,但我不知道如何将它们链接到下载的 html 中。
你能给我一些例子,或者从哪里开始吗?
提前致谢
最佳答案
基本上,您需要做的(以及下面提到的我的应用所做的)是遍历指向其他 Assets /图像/脚本等的所有引用链接,下载它们,然后将 HTML 文档更改为指向本地下载的副本。像这样,使用 Jsoup:
找到页面上所有的
img
元素,从
img
元素的 src 属性中获取图像文件的位置/url(使用.attr("abs:src:)
),将所有这些图像下载到本地目录
更改每个图像元素的 src 属性值以指向下载的图像文件的位置,相对于主 HTML 文件的存储位置,例如使用
.attr("src", "assets/imagefilename.png"")
.为页面所需的所有其他 Assets 执行此操作,例如。图片、CSS、脚本、html5 视频等。我还在 CSS(链接和内联)上做了一些正则表达式来提取、下载和重写诸如背景图像引用和 css 之类的东西。网页还有其他链接的内容,例如您可能也需要的网站图标或 RSS 提要。
通过调用
.toString()
并将结果保存到文件,将您的 Jsoup 文档(修改后的 URL 指向您下载的 Assets 版本)保存到文件中。
然后您可以在 webview 中打开本地 HTML 文件,假设您已正确完成所有操作,它将显示所有图像和 Assets ,甚至离线。
我实际上写了一个 Android 应用程序,它正是这样做的:使用 Jsoup 将完整的 HTML 文件和所有 CSS/图像/其他 Assets 保存到本地文件/目录。
参见 https://github.com/JonasCz/SaveForOffline/对于来源,特别是SaveService.java用于实际的 HTML 页面保存/下载代码。
请注意,它已获得 GPL 许可,因此如果您使用(部分)它,则必须遵守 GPL 许可。
另请注意,它做了很多事情,结果相当困惑(也没有评论或文档......)但它可能对您有所帮助。
关于javascript - 如何在android中下载一个Html页面及其内部文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35064536/