检测 WKWebview 中的按钮点击

Posted

技术标签:

【中文标题】检测 WKWebview 中的按钮点击【英文标题】:Detect button click in WKWebview 【发布时间】:2019-12-10 10:56:36 【问题描述】:

在我的 ios 应用程序中,我创建了一个网站的 WKWebview,但我自己并不拥有该网站。所以在我里面:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) 

我有几个 .evaluatejavascript 可以将数据添加到文本字段、删除网站上的元素等。

但我正在尝试添加一个 .evaluateJavascript (或其他)来识别网站上的按钮点击。

我尝试通过执行以下代码来添加它:

bookingView.evaluateJavaScript("document.getElementById('optional_button').onclick();")  (key, err) in
        if let err = err
            print(err.localizedDescription)
        
        else
            print("You tapped the button!")
        

但这不起作用。每次我打开 WebView 时,应用程序都会打印出 “您点击了按钮”,即使我没有。

那么,我可以使用 evaluateJavascript 检测按钮点击吗?

【问题讨论】:

***.com/questions/36046978/… @user1374 我试过那个.. 不工作:/ @Pute 你有答案吗?如果是,请在这里分享 @muthukumaresh 我没有……对不起。 Dosent 有这个项目了 【参考方案1】:

您可以捕获 url 并对其做出反应

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) 
        decisionHandler(.allow)
        guard let urlAsString = navigationAction.request.url?.absoluteString.lowercased() else 
            return
        

        if urlAsString.range(of: "the url that the button redirects the webpage to") != nil 
        // do something
         
     

【讨论】:

但每个用户的链接可能不同。由于它是一个预订系统,所以我猜每个用户的预订 ID 会有所不同......嗯,有什么想法吗? 所以你的意思是所有的 url 都会不同,或者只是参数中的预订 ID? 没错。因为它正在传递某种ID,例如。 "URL/bid=17642911/" 看我是否正确,您仍然可以使用该方法.. 如果您有这样的网址:***.com/questions/59265642,您仍然可以捕获此网址:***.com/questions【参考方案2】:

非常简单的解决方案:

webView.evaluateJavaScript("document.getElementsByTagName('input')[0].click()", completionHandler: nil)

将 0 替换为网页中的按钮索引。

【讨论】:

这不是一个解决方案:它点击按钮而不是“检测按钮点击”,就像问题一样

以上是关于检测 WKWebview 中的按钮点击的主要内容,如果未能解决你的问题,请参考以下文章

检测 WKWebView 中的非导航按钮单击

如何使用 iOS WKWebView 注入 JavaScript 回调来检测 onclick 事件?

iOS WKWebview如何检测我何时点击<a>标签内的图像

在 iOS WKWebView 中保留“Referer”标头?

iOS-WebView(WKWebView)进度条

使WKWebView在后台保持不变,同时显示另一个视图