Как получить идентификатор кликаемого элемента в представлении WebKit? - PullRequest
0 голосов
/ 27 ноября 2018

У меня загружено UIWebKit в URL, и я хочу выбрать идентификатор элемента HTML при нажатии.Я могу получить элемент, когда знаю идентификатор, но как получить неизвестный идентификатор элемента при нажатии.Спасибо за помощь !

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете сделать это следующим образом.

  1. Вставить некоторый javascript в WebView, используя WKUserScript.
  2. Внедренный javascript будет прослушивать тело документа для любого события щелчка.
  3. После получения события щелчка найдите элемент DOM, используя elementFromPoint.
  4. Настройте таким образом, чтобы javascript связывался с собственным кодом.
  5. После получения щелчков и обнаружения элемента,свяжитесь с нативным кодом для нажатой DOM.

Я проверил этот способ работы, и он работает для меня.

import UIKit
import WebKit

class ViewController: UIViewController {

    @IBOutlet weak var webView: WKWebView!
    private var url = URL(string: "https://www.google.com")!


    override func viewDidLoad() {
        super.viewDidLoad()

        initializeWebView()
        loadData()

    }

    private func initializeWebView() {

        let javascript = """
        window.onload = function() {
            document.addEventListener("click", function(evt) {
                var tagClicked = document.elementFromPoint(evt.clientX, evt.clientY);
                window.webkit.messageHandlers.jsMessenger.postMessage(tagClicked.outerHTML.toString());
            });
        }
        """

        let userScript = WKUserScript.init(source: javascript,
                                           injectionTime: .atDocumentStart, forMainFrameOnly: true)
        webView.configuration.userContentController.addUserScript(userScript)
        webView.configuration.userContentController.add(self, name: "jsMessenger")
    }

    private func loadData() {
        let request  = URLRequest(url: url)
        webView?.load(URLRequest.init(url: url))
    }
}


extension ViewController: WKScriptMessageHandler {
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print(message.body)
    }
}

Он дает вам весь элемент в виде строки

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