#swift #xcode #webview
#быстрый #xcode #webview
Вопрос:
Создание приложения, в котором у меня есть его часть в WebView. У меня на сайте есть как внутренняя, так и внешняя ссылка.
Я хочу, чтобы внутренние ссылки (с моего веб-сайта) открывались в приложении, а внешние ссылки открывались в браузере.
Погуглил, но не могу найти правильный код для меня. Либо они открывают все ссылки во внешнем браузере, либо все они открываются внутри самого приложения.
Кто-нибудь может мне помочь?
import UIKit import WebKit import GoogleMobileAds // Admob class Rekondare: UIViewController, WKNavigationDelegate { // webView Storyboard @IBOutlet weak var webView: WKWebView! // Reklam Admob @IBOutlet weak var GADBannerView: GADBannerView! override func viewDidLoad() { super.viewDidLoad() // Reklam ADMOB GADBannerView.adUnitID = "REMOVED" // Min admob GADBannerView.rootViewController = self GADBannerView.load(GADRequest()) GADBannerView.delegate = self // // Bara light mode overrideUserInterfaceStyle = .light // Get the path of the index.html which is part of the Xcode project (resp. in the main bundle). //guard let htmlPath = Bundle.main.path(forResource: "start", ofType: "html", inDirectory: "www") else { // return //} let myURL = URL(string:"https://google.com") // My website let myRequest = URLRequest(url: myURL!) webView.navigationDelegate = self webView.load(myRequest) // Create an URL to load it in the webView. //let url = URL(fileURLWithPath: htmlPath) //let request = URLRequest(url: url) //webView.navigationDelegate = self //webView.load(request) let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: #selector(refreshWebView(_:)), for: UIControl.Event.valueChanged) webView.scrollView.addSubview(refreshControl) webView.scrollView.bounces = true } @objc func refreshWebView(_ sender: UIRefreshControl) { webView?.reload() sender.endRefreshing() } func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -gt; Void) { // Check for links. if navigationAction.navigationType == .linkActivated { // Make sure the URL is set. guard let url = navigationAction.request.url else { decisionHandler(.cancel) return } // Check for the scheme component. let components = URLComponents(url: url, resolvingAgainstBaseURL: false) if components?.scheme == "http" || components?.scheme == "https" { if navigationAction.targetFrame == nil { UIApplication.shared.open(url) decisionHandler(.cancel) return } // Open the link in the external browser. UIApplication.shared.open(url) // Cancel the decisionHandler because we managed the navigationAction. decisionHandler(.cancel) return } } else { decisionHandler(.allow) } } } // Reklam ADMOB extension Rekondare: GADBannerViewDelegate { func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { print("received ad") } func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) { print(error) } }