Для обработки нажатия кнопки в 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
, есть другие методы для работы с событиями, вам может потребоваться использовать другой подход.