- 更新日: 2015年9月11日
- Swift & iOS
WKWebViewでtarget=”_blank”のリンクを開く(Swift)
iOS で WKWebView でウェブページを表示する画面を作成していたのですけど、ウェブページ側のリンクに target=”_blank” が設定されているとリンクが開けないという現象に遭遇しました。調べたところ、stackoverflow をはじめいくつか解決策の書いてあるページが見つかりました(末尾の参考リンク参照)。日本語の情報は少なかったですけど。
— 環境 —
Xcode 6.3.2
Swift 1.2
iOS 8 以上
WKWebView を使って Swift でウェブページを表示させる方法は、以下のエントリー参照。
WKWebView(WebKit)とSwiftでウェブページを表示 | EasyRamble
WKUIDelegate を継承して webView() メソッド実装で解決
WKUIDelegate を継承して webView() メソッドを実装します。target=”_blank”(navigationAction.targetFrame が nil)の場合には、URL ロードのリクエストをもう一回行うようにする。
WebKitViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import UIKit import WebKit class WebKitViewController: UIViewController, WKUIDelegate { var webView : WKWebView? override func viewDidLoad() { super.viewDidLoad() // set WKWebView self.webView = WKWebView() self.view = self.webView let urlString = "http://www.yahoo.co.jp/" let encodedUrlString = urlString.stringByAddingPercentEncodingWithAllowedCharacters( NSCharacterSet.URLQueryAllowedCharacterSet() ) let url = NSURL(string: encodedUrlString!) let request = NSURLRequest(URL: url!) self.webView!.UIDelegate = self self.webView!.loadRequest(request) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } // open link with target="_blank" in the same view func webView(webView: WKWebView, createWebViewWithConfiguration configuration: WKWebViewConfiguration, forNavigationAction navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? { if navigationAction.targetFrame == nil { webView.loadRequest(navigationAction.request) } return nil } } |
WKUIDelegate を継承して、viewDidLoad() に self.webView!.UIDelegate = self を追加しました。後は、webView() を実装する。以上のコードで無事に、WKWebView 画面に表示したウェブページ内の target=”_blank” が設定したあるリンクを開けるようになった。
- – 参考リンク –
- ios8 – Why is WKWebView not opening links with target=”_blank” – Stack Overflow
- ios – Open a WKWebview target=”_blank” link in Safari using SWIFT – Stack Overflow
- iOS – WKWebViewでtarget=”_blank”なリンクが開かない時の対処法 – Qiita
- UIWebViewから target=”_blank” や window.open() のページを開く方法 | Eudyptes Chrysocome
- Swift & iOS の関連記事
- WKWebView/UIWebViewでウェブページが真っ白
- Unityのインストールと初期設定
- WKWebView/UIWebViewでNavigation Barの下にウェブページが隠れるのを回避
- SwiftでArray(配列)などをシャッフル
- Navigation Controllerで画面遷移させるSwiftコード
- Swiftでタップ/スワイプのイベント処理実装・UITapGestureRecognizerとUISwipeGestureRecognizer
- UIPageViewController画面下部のUIPageControlを非表示にする
- Swiftのバージョン確認・REPL実行
- Xcode7.0アップデートで遭遇した課題2つ
- 正規のXcodeかどうかチェック(XcodeGhostマルウェア騒動)
Leave Your Message!