Нажатие кнопки в webview swift?

Для обработки нажатия кнопки в WebView в приложении на Swift существует несколько подходов. Один из наиболее распространенных - это использование методов делегата и JavaScript. Давайте рассмотрим подробнее.

1. Сначала нам нужно настроить WebView в нашем ViewController. Это можно сделать следующим образом:

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

    var webView: WKWebView!

    override func loadView() {
        webView = WKWebView()
        webView.navigationDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let url = URL(string: "https://www.example.com")!
        webView.load(URLRequest(url: url))
        webView.allowsBackForwardNavigationGestures = true
    }

    // Метод делегата для обработки завершения загрузки веб-страницы
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        // Веб-страница полностью загружена
    }
}

2. Теперь, когда у нас есть настроенный WebView, мы можем добавить код для обработки нажатия кнопки. Для этого мы будем использовать JavaScript. Вот как это можно сделать:

// Код для обработки нажатия кнопки на веб-странице
let onClickScript = """
  var buttons = document.getElementsByTagName("button");
  for (var i = 0; i < buttons.length; i++) {
    buttons[i].addEventListener("click", function() {
      window.webkit.messageHandlers.buttonClicked.postMessage(null);
    });
  }
"""

// Зарегистрировать обработчик сообщений для JavaScript
let userContentController = WKUserContentController()
userContentController.add(self, name: "buttonClicked")
let configuration = WKWebViewConfiguration()
configuration.userContentController = userContentController

// Создать WebView с настроенной конфигурацией
let webView = WKWebView(frame: .zero, configuration: configuration)

3. Далее, нам нужно реализовать протокол WKScriptMessageHandler для обработки сообщений от JavaScript:

extension ViewController: WKScriptMessageHandler {
    // Метод для обработки сообщений от JavaScript
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "buttonClicked" {
            // Обработать нажатие кнопки
            print("Button clicked")
        }
    }
}

4. Наконец, мы можем вызвать JavaScript-код для обработки нажатия кнопки в методе webView(_:didFinish:) делегата, который вызывается после загрузки веб-страницы:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    webView.evaluateJavaScript(onClickScript, completionHandler: nil)
}

Теперь, когда пользователь нажимает кнопку на веб-странице, метод userContentController(_:didReceive:) вызывается, и вы можете выполнять необходимые действия в зависимости от события.

Это пример извлечения кнопок с помощью JavaScript и обработки нажатия в Swift. Однако, если у веб-страницы, загружаемой в WebView, есть другие методы для работы с событиями, вам может потребоваться использовать другой подход.