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