UIWebView 和 URLRequest 拦截

Posted

技术标签:

【中文标题】UIWebView 和 URLRequest 拦截【英文标题】:UIWebView and URLRequest Interception 【发布时间】:2018-12-13 21:36:45 【问题描述】:

我正在尝试了解 UIWebView 中的请求拦截问题,以便我可以开始研究 WKWebView。

我不明白的是,UIWebView 有自己的拦截方法,即 shouldStartLoadWithRequest,但似乎大多数人仍在实现自定义 NSURLProtocol 来进行拦截。我很好奇为什么大多数人选择不使用 UIWebView 的方法?这里有什么区别?

【问题讨论】:

UIAlertController custom font, size, color的可能重复 【参考方案1】:

如果您只想加载或拒绝请求,您可以在 WKWebView 中执行此操作,方法是成为其 WKWebViewNavigationDelegate 并实现 webView(_:decidePolicyFor:decisionHandler:)

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) 
    let request = navigationAction.request

    let policy: WKNavigationActionPolicy
    if request.path.contains("something_bad") 
        policy = .cancel
     else 
        policy = .allow
    
    decisionHandler(policy)

【讨论】:

我了解,但据我了解,这个类只截取url,不截取任何资源和Ajax请求。我想知道 UIWebViews shouldStartLoad 是否相同 有问题的方法只捕获页面加载,而不是其他资源加载。那些人很可能想要拦截图像加载、脚本加载等。

以上是关于UIWebView 和 URLRequest 拦截的主要内容,如果未能解决你的问题,请参考以下文章

swift - UIWebView 和 WKWebView(iOS12 之后替换UIWebView)

无需单击即可检测UIWebView链接

如何检测UIWebView中的单击文件链接?

加载 UIWebView 时如何使用 UIProgressView?

在 UIWebView 中没有调用 scrollViewDidScroll

iOS下JS与OC互相调用--UIWebView 拦截URL