xcode 16.4 使用 webview

xcode 16.4 使用 webview
01.新增專案 :
template 選 iOS -> App ,Interface 選 Storyboard ,Language 選 swift

02.編輯 ViewController.swift
(1) 新增 import WebKit

import WebKit

(2)在 class ViewController: UIViewController { }內新增

var webView: WKWebView!

override func loadView() {
    let prefs=WKWebpagePreferences();
    prefs.allowsContentJavaScript = true
    
    let webConfiguration = WKWebViewConfiguration()
    webConfiguration.defaultWebpagePreferences = prefs
    
    
    webView = WKWebView(frame: .zero, configuration: webConfiguration)
    webView.navigationDelegate = self
    view = webView
}

(3) 在 override func viewDidLoad() {}  super.viewDidLoad() 竹人女戈田後新增

let myURL = URL(string:"https://tw.yahoo.com )
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
webView.allowsBackForwardNavigationGestures = true

03.處理當網頁中的連結 target=”_blank” 無法顯示的問題
(01) 在ViewController.swift 新增

extension ViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        
        if navigationAction.targetFrame == nil {
            decisionHandler(.cancel)
            webView.load(navigationAction.request)
            return
        }

        decisionHandler(.allow)
    }
    func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
        // Handle creation of new windows (e.g., for pop-ups)
        return nil // Or return a new WKWebView for the pop-up
    }
}

(02) 在 override func loadView() 內 的 view = webView 新增

webView.navigationDelegate = self

(03) 如果要使用外部瀏覽器打開,則

// 為求範例單純化這邊只檢查 targetFrame ,
// 實務上還是需要加上檢查 url 是不是合法可以開啟等等處理
  if navigationAction.targetFrame == nil {
      decisionHandler(.cancel)
      UIApplication.shared.open( navigationAction.request )
      return
  }

 

參考資料 :
1.https://qiita.com/vc7/items/90bd7da89aee54936bfd