【发布时间】:2018-10-29 09:08:08
【问题描述】:
我有一个可以访问任意网站的 WKWebView。当用户单击任何 HTML <img> 元素时,我希望它将该图像(作为文件)透明地保存到应用程序 tmp 目录中,理想情况下使用标准标题(img.png),并且理想情况下它每次都会覆盖。
鉴于客户端 JavaScript 无法访问文件系统,我预计全自动解决方案将涉及 FileManager;但是,我不知道如何将<img> 数据从WKWebView 传输到FileManager 实例。我想知道是否可能需要涉及JavaScriptCore,以在两者之间架起数据桥梁。
我看到 semi-automatic solutions exist,通过使用 HTML download 属性,其中提示用户“另存为...”对话框。这并不理想,因为我希望该操作是透明且没有用户错误。但是,它可能被证明是唯一的选择。
我在 macOS 和 iOS 上都实现了这个,所以我可以接受任何一个平台的解决方案;我预计两者之间不会有什么不同。
【问题讨论】:
-
如果您正在访问的 Web URL 没有提供下载图像的权限,那么我认为没有办法
WKWebView只是加载网页和WKWebView内的所有交互都取决于该网页内用于交互的用户和脚本,我们不在WKWebView内有任何delegate,用于跟踪用户与网页内的HTML 标签 的交互 -
我已经设置了一个 JavaScript 点击处理程序,用于识别用户是否点击了 HTML
<img>元素。我可以使用这个回调本地;问题在于调用什么代码。 -
您将如何从您的网页向您的应用程序发送一条用户已点击某个图像的消息?
-
@ShubhamBakshi 我正在使用WKScriptMessageHandler 从 WKWebView 与本机应用程序进行通信。我通过WKUserContentController 将脚本注入到 WKWebView 页面中——其中一个脚本就是我提到的附加点击处理程序的脚本。 WKNavigationDelegate 在这里不太相关。
标签: ios swift macos wkwebview nsfilemanager