【问题标题】:Android WebViewClient's shouldInterceptRequest method: is there any equivalent of that in iOS?Android WebViewClient 的 shouldInterceptRequest 方法:在 iOS 中有没有等价的方法?
【发布时间】:2015-05-30 03:29:20
【问题描述】:

在 Android 中,我可以使用 WebViewClient 的 shouldInterceptRequest 方法来自定义 WebView 对某些 URL 的处理。但是,我在 iOS 的 UIWebView 和 UIWebViewDelegate 中找不到任何等效的东西。有什么方法可以实现与 iOS 中的 shouldInterceptRequest 相同的目的,即允许我为资源请求返回数据?

我想做的是让网络视图支持一些私有图像格式(见问题:Can I make Android WebView support other image formats (e.g. TIFF)?)。

欢迎提出任何建议。

【问题讨论】:

    标签: ios objective-c uiwebview


    【解决方案1】:
    【解决方案2】:

    在 UIKit 中没有完全一样的方法,但是你可以通过实现-[UIWebViewDelegate webView:webView:shouldStartLoadWithRequest:navigationType:] 来获得相同的效果。在这种方法中,您可以调用-[UIWebView loadData:MIMEType:textEncodingName:baseURL:] 来加载您自己的数据,然后返回 NO,这样 Web 视图就不会尝试加载它自己的数据。

    【讨论】:

    • 你提到的方法是为整个页面调用的,而不是页面中的每个资源(如 ),这意味着我必须在加载之前解析和重现整个页面。我说的对吗?
    • 它是为页面的各个部分调用的,我不确定每张图片,但我想会是因为每张图片都需要单独的 url 请求。试试看,让我们知道!
    • 为整个页面(或框架)调用它,但不是为每个资源调用。
    • 是的,shouldStartLoadWithRequest: 相当于 Android 的 shouldOverrideUrlLoading,它仅在页面 URL 更改时调用,而不是 shouldInterceptRequest,它为从浏览器检索到的每个资源调用。所以这并不能真正回答 OP 的问题。 @shengbinmeng的回答是正确的。
    • 附录:NSURLProtocol 不能与 WKWebView 保持一致。见stackoverflow.com/questions/24208229/…
    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2022-11-03
    • 2011-08-28
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多