检测 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 中的按钮点击的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 iOS WKWebView 注入 JavaScript 回调来检测 onclick 事件?
iOS WKWebview如何检测我何时点击<a>标签内的图像