我正在製作一個Cocoa應用程序,該應用程序涉及用戶從在線選擇應用程序內使用的圖片。我還希望從這些下載中收集上下文元數據,例如圖像來自的主機,用戶訪問的網站,響應頭中的確切MIME類型等。如何攔截WKWebView的下載?
基本上我想策劃我的用戶通過互聯網,隨時隨地將圖像和元數據下載到該用戶的帳戶中。直到今天,我認爲這是不可能的。
但是就在最近我正在玩弄一個WKWebView,我試着右擊一個圖像。我看到這個...
有什麼辦法,我可以連接到下載圖像按鈕,並得到通知其點擊時?
我正在製作一個Cocoa應用程序,該應用程序涉及用戶從在線選擇應用程序內使用的圖片。我還希望從這些下載中收集上下文元數據,例如圖像來自的主機,用戶訪問的網站,響應頭中的確切MIME類型等。如何攔截WKWebView的下載?
基本上我想策劃我的用戶通過互聯網,隨時隨地將圖像和元數據下載到該用戶的帳戶中。直到今天,我認爲這是不可能的。
但是就在最近我正在玩弄一個WKWebView,我試着右擊一個圖像。我看到這個...
有什麼辦法,我可以連接到下載圖像按鈕,並得到通知其點擊時?
我沒弄清楚如何使「下載鏈接文件」的工作,其將不適合在一個謊言SO回答:https://github.com/kfix/MacPin/commit/9e5f925819f7f54ef29baff1e90783b820e683a3
但是實現這些私人代表的功能似乎並沒有讓「下載圖片「以任何方式表示我的WkWebView應用程序。
您可以攔截那些非工作「下載圖像」和「下載鏈接文件」通過繼承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控制實際點擊用戶什麼是下一個挑戰:)