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

uiwebview
swift

#1

Приветствую всех
Кто может поделиться опытом нажатия кнопки в webiew

Кнопка следующего типа
<div class=__"q02Nz _0TPg" role="menuitem" tabindex="0"><span class="glyphsSpriteNew_post__outline__24__grey_9 u-__7" aria-label="New Post"></span></div>

Буду признателен за ответы


#2
let html = """
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
</head>
<body>
    <div class="test" style="height: 40px; width: 100px; background-color: powderblue;">Hello</div>
    <script type="text/javascript">
        document.getElementsByClassName("test")[0].addEventListener("click", () => {
            window.webkit.messageHandlers.callbackHandler.postMessage("")
        })
    </script>
</body>
</html>
"""

class ViewController: UIViewController, WKScriptMessageHandler {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let config = WKWebViewConfiguration()
        let contentController = WKUserContentController()
        config.userContentController = contentController

        let webView = WKWebView(frame: view.frame, configuration: config)
        
        view.addSubview(webView)
        webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        
        contentController.add(self, name: "callbackHandler")
        
        webView.loadHTMLString(html, baseURL: nil)
    }

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        guard message.name == "callbackHandler" else { return }
        print("Hello")
    }
}


#3

Спасибо, как всегда за Ваши ответы. Все понятно. Только уточню. Кнопка находится на сайте, который я открываю в webview. Мне тогда в скрипте не нужны стили, только оставить
<body_>
<script type=“text/javascript”>
document.getElementsByClassName("q02Nz 0TPg")[0].addEventListener(“click”, () => {
window.webkit.messageHandlers.callbackHandler.postMessage("")
})
</script
>
</body
>

И сначала надо загрузить webview и сделать иньекцию скрипта? после метода загрузки страницы


#4

Да.

Вот так можно отследить кнопку “Войти” на этом форуме.

class ViewController: UIViewController, WKScriptMessageHandler, WKNavigationDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let config = WKWebViewConfiguration()
        let contentController = WKUserContentController()
        config.userContentController = contentController
        
        let webView = WKWebView(frame: view.frame, configuration: config)
        webView.navigationDelegate = self
        
        view.addSubview(webView)
        webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        
        contentController.add(self, name: "callbackHandler")
        
        webView.load(URLRequest(url: URL(string: "https://forum.swiftbook.ru")!))
    }
    
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        guard message.name == "callbackHandler" else { return }
        print("Hello")
    }
    
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        let js = """
            document.getElementsByClassName("widget-button btn btn-primary btn-small login-button btn-icon-text")[0].addEventListener("click", () => {
                    window.webkit.messageHandlers.callbackHandler.postMessage("")
            })
        """
        webView.evaluateJavaScript(js, completionHandler: nil)
    }
}


Переход по ссылке в WKWebView
#5

Благодарю. Вы как всегда - всем вопросам голова. Все получилось. Спасибо