Помощь с Swift 5 WebKit и открытием ссылок TEL и EMAIL с HTML в ViewController - PullRequest
0 голосов
/ 31 января 2020

Спасибо за вашу помощь заранее. Я безнадежно застрял.

Проблема: Я использую 11.3.1 XCode и Swift 5. Я создал общие WKWebView для четырех ViewControllers в приложении с вкладками. Они чисто служат HTML. Я не могу запрограммировать кнопку быстрого запуска из HTML, очевидно.


На страницах WebKit контроллера:

import UIKit
import WebKit

class SecondViewController: UIViewController {

    @IBOutlet var webViewTwo: WKWebView!
    override func viewDidLoad() {
        super.viewDidLoad()

        let url = URL(string: "https://berksstorage.com/beekeeper/login.html")
        webViewTwo.load(URLRequest(url: url!))

}

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }


}

webView: все детекторы данных выбраны:

WebView Селекторы данных `


Сводка: Независимо от того, что я делаю, не все ссылки открываются. Почему? Все мои кнопочные ссылки - HTTPS.

iOS13 просто полностью игнорирует HTML a. Кнопка ссылки как ничего. Я знаю кнопку а. ссылки структурированы правильно. Я не уверен, почему swift не открывает ссылки кнопок TEL и EMAIL?

Может кто-нибудь объяснить мне, почему iOS13 НЕ будет открывать ссылки TEL и EMAIL внутри Webview? Я могу только предположить, что где-то есть ограничение. Пожалуйста помоги!

1 Ответ

0 голосов
/ 31 января 2020

Это определенно решаемо. Во-первых, давайте рассмотрим идею, что вы не можете запрограммировать кнопку с HTML. Если вы обслуживаете HTML в WKWebView, то вы можете захватывать ссылки, когда они появляются. Вот как это делается:

1) Создайте объект класса, соответствующий WKNavigationDelegate

2) В этом классе реализуйте func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void), который является функцией, предписанной делегатом.

3) Выполните следующим образом:


func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.navigationType == WKNavigationType.linkActivated {

       // Here you can examine properties of the link through the navigationAction object
       let request = navigationAction.request
       let urlString = request.url.absoluteURL.lowercased()

       if urlString.hasPrefix("tel") {
           //You can construct a url to then open
           let phoneUrl = // construct here
           UIApplication.shared.open(phoneUrl)
           decisionHandler(WKNavigationActionPolicy.cancel)
           return
       } else if urlString.contains("mailto:") {
           let mailUrl = // construct here
           UIApplication.shared.open(mailUrl)
           decisionHandler(WKNavigationActionPolicy.cancel)
           return
       }
    }
    print("not captured, continuing execution")
    decisionHandler(WKNavigationActionPolicy.allow)
 }

4) Вам необходимо установить делегата для вашего WKWebView:

yourWkWebView.navigationDelegate = theObjectThatConformsToTheDelegateInStep3

Заключительные мысли:
Если вы необходимо начать процесс создания электронной почты, вот несколько рекомендаций:

Open = message://
Start draft with recipient = mailto://TheirEmailAddress
Start draft with recipient, cc = mailto:TheirEmailAddress?cc=TheirEmailAddress
Start draft with recipient, bcc = mailto:TheirEmailAddress?bcc=TheirEmailAddress
Start draft with recipient, subject = mailto:TheirEmailAddress&subject=Your%20Subject%20Text
Start draft with recipient, body = mailto:TheirEmailAddress&body=Your%20Body%20Text
Start draft with recipient, CC, BCC, subject, body = mailto:TheirEmailAddress?cc=TheirEmailAddress?bcc=TheirEmailAddress&subject=Your%20Subject%20Text&body=Your%20Body%20Text

Если вам нужно открыть приложение для телефона, вы сможете пройти по самой ссылке. iOS ищет что-то, что начинается с tel:// или telprompt://

. Этот сайт хорошо работает в соответствии со схемами URL, которые использует Apple:

https://ios.gadgethacks.com/news/always-updated-list-ios-app-url-scheme-names-0184033/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...