在WKWebview中检测按钮点击

5

我在我的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时,应用程序都会打印出"You tapped the button",即使我没有点击。

所以,我能否使用evaluateJavascript检测按钮点击?


https://dev59.com/gVoV5IYBdhLWcg3wmPtH - user1374
@user1374 我已经尝试过那个了... 不起作用 :/ - Putte
@Putte,你有答案吗?如果有,请在这里分享。 - muthukumaresh
@muthukumaresh 对不起,我没有了这个项目。 - Putte
3个回答

7

你可以捕获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对于每个用户都会不同... 嗯,有什么想法吗? - Putte
那么您的意思是所有的URL都会不同,还是只有参数中的预订ID不同? - Erez Mizrahi
没错。因为它传递了某种ID,比如“URL/bid=17642911/”。 - Putte
如果我理解正确的话,您仍然可以使用该方法。如果您有这样的URL: https://dev59.com/m7jna4cB1Zd3GeqP2gHP 您仍然可以捕获此URL: https://stackoverflow.com/questions - Erez Mizrahi

0

我为监听按钮事件点击所做的解决方法是通过修改HTML按钮并添加href来实现。

例如:

将href添加到您的按钮事件“window.location.href =“iosapp://button1”;

在您的iOS应用程序中

    -(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{

    if([navigationAction.request.URL.absoluteString isEqualToString:@"iosapp://button1"])
    {
        //Do whatever you need when this button is clicked
    }
    
    decisionHandler(WKNavigationActionPolicyAllow);
}

-1
非常简单的解决方案:
webView.evaluateJavaScript("document.getElementsByTagName('input')[0].click()", completionHandler: nil)

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


这不是一个解决方案:它是通过点击按钮来执行操作,而不是“检测按钮点击”,正如问题所述。 - timbre timbre
这不是在Webview中处理按钮点击的解决方案。 - Biswajit Banik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接