2016-06-16 74 views
2

我正在製作一個Cocoa應用程序,該應用程序涉及用戶從在線選擇應用程序內使用的圖片。我還希望從這些下載中收集上下文元數據,例如圖像來自的主機,用戶訪問的網站,響應頭中的確切MIME類型等。如何攔截WKWebView的下載?

基本上我想策劃我的用戶通過互聯網,隨時隨地將圖像和元數據下載到該用戶的帳戶中。直到今天,我認爲這是不可能的。

但是就在最近我正在玩弄一個WKWebView,我試着右擊一個圖像。我看到這個...

enter image description here

有什麼辦法,我可以連接到下載圖像按鈕,並得到通知其點擊時?

回答

0

您可以攔截那些非工作「下載圖像」和「下載鏈接文件」通過繼承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控制實際點擊用戶什麼是下一個挑戰:)