обработка внешних ссылок в быстром UIWebKit? - PullRequest
0 голосов
/ 25 августа 2018

Я работаю над веб-просмотром, используя swift 4. Я загружаю локальные html-файлы, на этих страницах есть некоторые ссылки на другие сайты, но как только я нажимаю на любой из них, я хочу загрузить их в браузер Safari или по умолчанию вместо WebView (браузер).

мой webView называется "браузер"

Вот мои коды ViewController.swift:

import UIKit
import WebKit

class ViewController: UIViewController {

@IBOutlet weak var browser: WKWebView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


    let htmlpath = Bundle.main.path(forResource: "kusrc/index", ofType: "html")
    let url = URL(fileURLWithPath: htmlpath!)
    let request = URLRequest(url: url)
    browser.load(request)


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}





}

Может ли кто-нибудь мне помочь? большинство результатов в Google не то, что мне нужно ...

Есть ли возможность составить предложение if, где его спрашивают, если stringprefix = "http: // или https://", а затем открыть safari, в противном случае" browser "

1 Ответ

0 голосов
/ 25 августа 2018

Я думаю, что вы ищете этот метод делегата:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.navigationType == .linkActivated {
        guard let url = navigationAction.request.url else {
            decisionHandler(.allow)

            return
        }

        UIApplication.shared.open(url)
        decisionHandler(.cancel)
    } else {
        decisionHandler(.allow)
    }
}

Если вы хотите дифференцировать в соответствии со схемой URL, вы можете использовать URLComponents, чтобы разделить URL-адрес на части.

let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
if components?.scheme == "http" || components?.scheme == "https" {
    // insert your code here
}

// редактировать (немного более подробно):

  1. import WebKit на самый верх вашего класса: import WebKit
  2. Сделайте ваш класс совместимым с WKNavigationDelegate, добавив его позади родительского класса: class ViewController: UIViewController, WKNavigationDelegate
  3. Назначьте свой класс делегату навигации WKWebView: browser.navigationDelegate = self
  4. Добавьте приведенный выше код к вашему классу

Суть того, как должен выглядеть ваш класс в конце: WKWebView открытые ссылки в Safari

И вот очень хороший учебник по теме: https://www.hackingwithswift.com/example-code/wkwebview/how-to-control-the-sites-a-wkwebview-can-visit-using-wknavigationdelegate

...