【Swift】WKWebViewでtarget="_blank"のリンクを開く方法!

この記事からわかること

  • SwiftWebサイトiOSアプリから開く方法
  • WKWebViewクラス使い方
  • target="_blank"リンク開くには?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

WKWebViewではtarget="_blank"のリンクを開けない

SwiftのWKWebViewではデフォルトでtarget="_blank"リンクを開くことができない仕様になっています。リンクボタンをクリックしても何も応答しないのでこのままではユーザビリティが低下してしまいます。

WKWebViewでtarget="_blank"のリンクを開く方法

これを開けるようにするにはViewControllerクラスにWKUIDelegateを継承してtargetFrameがnilの際に再度読み込みを行わせることで解決することができます。実装は以下の通りになります。

func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    // target_blankの場合でも開けるようにする
    if navigationAction.targetFrame == nil {
        webView.load(navigationAction.request)
    }
    return nil
}

WKUIDelegateを継承させたらWKWebViewインスタンスのuiDelegateにセットすることを忘れないようにしてください。

webView.uiDelegate = self

WKNavigationAction.targetFrameプロパティとは?

公式リファレンス:WKNavigationAction.targetFrameプロパティ

WKNavigationAction.targetFrameプロパティはWebViewが新しいウィンドウやフレームを開こうとしている際にその新しいウィンドウやフレームが存在しない場合nilが格納されます。

target="_blank"の場合は新しいウィンドウを開こうとしますが、存在しないのでnilが格納されるので再度webView.load(navigationAction.request)を実行することで既存のWKWebViewインスタンスでtarget="_blank"リンクを開くことが可能になります。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index