检测用户何时点击加载在 UIWebView 或 WKWebView 中的 web 表单

Posted

技术标签:

【中文标题】检测用户何时点击加载在 UIWebView 或 WKWebView 中的 web 表单【英文标题】:Detecting when a user clicks on a webform loaded in a UIWebView or WKWebView 【发布时间】:2015-04-09 11:22:50 【问题描述】:

我想检测用户何时按下在 ios webview 中加载的 html 页面中的 webform 按钮(最好使用 WKWebView)。 这可能吗?如果可以,如何

一般评论:

我知道 WKWebView 有一些限制,因此如果您知道一种适用于 WKWebView 的方法,请分享。如果您知道一种适用于 UIWebView 的方法,请分享它,我可以使用它作为开始为我的基于 WKWebView 的应用程序寻找解决方案。

【问题讨论】:

【参考方案1】:

要使用 WKWebView 这样做,您需要符合 WKNavigationDelegate,并设置 webView 的 navigationDelegate

您可能正在寻找的方法是- webView:decidePolicyForNavigationAction:decisionHandler:,您可以在其中确定是否允许链接触摸。您可以从navigationAction.request.URL获取目标网址。

一个简单的例子:

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

    if ([navigationAction.request.URL.relativeString hasPrefix:kLocalContentPrefix])
    
        // Show some local content

        // Don't let the webview load this URL.
        decisionHandler(WKNavigationActionPolicyCancel);
    
    else
    
        // Allow the webview to load this URL.
        decisionHandler(WKNavigationActionPolicyAllow);
    

要在 UIWebView 中做到这一点,几乎是一样的,只是你在UIWebViewDelegate 中符合-(BOOL)webView:shouldStartLoadWithRequest:navigationType:。但如果可能,我会推荐使用 Webkit!

【讨论】:

【参考方案2】:

有一种解决方法,由 shazron 在 Objective-C 中的 https://github.com/shazron/WKWebViewFIleUrlTest 演示,将文件复制到 /tmp/www 并从那里加载它们。

【讨论】:

感谢您的回答。项目描述说“一个测试项目,用于证明 WKWebView 类无法在设备上的 iOS 8 beta 4 和 5 中加载 file:// url”。我不明白如何使用它来拦截用户点击。你能说得更具体点吗?

以上是关于检测用户何时点击加载在 UIWebView 或 WKWebView 中的 web 表单的主要内容,如果未能解决你的问题,请参考以下文章

@interface 中的 UIWebView 委托设置

知道何时在 UIWebView 中加载了 AJAX

禁用放大 UIWebView 但保留其他用户交互

检测 webview 视频何时在 ios8 上变为全屏

检测 UIWebView 上的触摸,但忽略滑动或触摸交互式元素(链接或点击)

如何判断 UIWebView 何时完成渲染(未加载)?