我正在制作一个Cocoa应用程序,涉及用户从在线选择图片以便在应用程序中使用。我还希望从这些下载中收集上下文元数据,例如图像来自的主机,用户访问的网站,响应标头中的确切MIME类型等。
基本上我想通过互联网策划我的用户,在我去的时候将图像和元数据下载到该用户的帐户中。直到今天,我认为这是不可能的。
但就在最近我玩弄了WKWebView,我试图右键点击图片。我看到了......
有什么方法可以连接到下载图像按钮,并在点击时收到通知吗?
答案 0 :(得分:1)
我确实弄清楚了如何制作“下载链接文件”的工作,以及它不适合SO答案:https://github.com/kfix/MacPin/commit/9e5f925819f7f54ef29baff1e90783b820e683a3
然而,实现这些私有委托功能似乎不允许“下载图像”以任何方式向我的WkWebView应用程序发出信号。
答案 1 :(得分:0)
你可以拦截那些不工作的人#34;下载图片"和"下载链接文件"菜单项通过继承WKWebView类并实现willOpenMenu
方法,如下所示:
class MyWebView: WKWebView {
override func willOpenMenu(_ menu: NSMenu, with event: NSEvent) {
for menuItem in menu.items {
if menuItem.identifier == "WKMenuItemIdentifierDownloadImage" ||
menuItem.identifier == "WKMenuItemIdentifierDownloadLinkedFile" {
menuItem.action = #selector(menuClick(sender:))
menuItem.target = self
}
}
}
func menuClick(sender: AnyObject) {
if let menuItem = sender as? NSMenuItem {
Swift.print("Menu \(menuItem.title) clicked")
}
}
}
除此之外,您还可以使用menuItem.isHidden = true
检测所选择的菜单项是一回事,但是知道用户在WKWebView控件中实际点击了什么是下一个挑战:)