blog

プログラミングメモとひとりごと。

Swift4 WKWebViewでtarget = "_ blank"リンクを(Safariで)開きたい

marimoko3.hatenablog.com

 

WKWebViewでは

target = "_ blank"なリンクが開かないので

対処法を探す

 

 

 

qiita.com

別法

コメント欄に @taketo1024 さんが書いてくださった方法のSwift 3.0版です。
(※ 上記はプロトコルWKNavigationDelegatewebView.navigationDelegate = selfを指定することで動きますが、こちらはWKUIDelegatewebView.uiDelegate = selfと指定します。)

func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    guard let url = navigationAction.request.url else {
        return nil
    }

    guard let targetFrame = navigationAction.targetFrame, targetFrame.isMainFrame else {
        webView.load(URLRequest(url: url))
        return nil
    }
    return nil
}

 

qiita.com

wkWebView.uiDelegate = self

 

 func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration,
                 for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {

        if navigationAction.targetFrame == nil {
            webView.load(navigationAction.request)
        }

        return nil
    }

 

私としては同じ画面で開くのではなく

Safariを起動して、新しくページを開いてほしかったので

 

teratail.com

teratail.com

 

この辺を参考にして

 

 

結果、これで動きました。(Xcode10.1です)

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {

 

    @IBOutlet weak var webview: WKWebView!

    

    @IBOutlet weak var backButton: UIBarButtonItem!

    @IBOutlet weak var forwardButton: UIBarButtonItem!

    @IBOutlet weak var reloadButton: UIBarButtonItem!

 

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

//      target="_blank"を開くのに必要な設定

        webview.uiDelegate = self

中略

    func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {

        guard let url = navigationAction.request.url else {

            return nil

        }

 

        guard let targetFrame = navigationAction.targetFrame, targetFrame.isMainFrame else {

//            webView.load(URLRequest(url: url)) //自画面で開く

            UIApplication.shared.open(url)      //safariで開く

            return nil

        }

        return nil

    }

 

iOSでブラウザを作ってシェアボタンを追加する

marimoko3.hatenablog.com

 

ブラウザの表示はできて、進む、戻る、リロードボタンも実装できたので

 

シェアボタンのことを調べている

 

yuu.1000quu.com

f:id:marimoko3:20191022132446j:plain 

 

画面キャプチャはこれで撮れた

teratail.com

 

f:id:marimoko3:20191022132521j:plain

 

画面キャプチャを撮ってシェアするという機能追加は出来た

 

本当はブラウザ内の文章を取得してそれをテキストにして付けたいのだが

できるのだろうか、、、