2016-06-16 11 views
2

私は、ユーザーがアプリ内で使用するためにオンラインから画像を選択することを伴うCocoaアプリを作っています。また、画像から来たホスト、訪問したウェブサイト、応答ヘッダーの正確なMIMEタイプなど、これらのダウンロードからコンテキストメタデータを収集することも検討しています。WKWebViewからダウンロードをインターセプトするにはどうすればよいですか?

基本的に私は自分のユーザーを管理したいインターネットを介して、私が行ったときに画像とメタデータをそのユーザーのアカウントにダウンロードします。今日まで私はこれが不可能だと思った。

ちょうど最近私はWKWebViewでおもしろかったし、イメージを右クリックしようとしました。私はこれを見た...

enter image description here

私はそのダウンロードイメージボタンに接続し、そのクリックされたときに通知を得ることができる方法はありますか?

答えて

1

私は、「リンクされたファイルをダウンロードし、」仕事とSO答えに収まらないそのdoozyようにする方法を見つけ出すんでした:https://github.com/kfix/MacPin/commit/9e5f925819f7f54ef29baff1e90783b820e683a3

しかし、それらのプライベートデリゲートの機能を実現する「イメージのダウンロードを許可していないようですが私のWkWebViewアプリに何らかの方法で信号を送ることができます。

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コントロールでクリックしたユーザーは、次の課題です:)

関連する問題