在调用 UIWebView 的 loadHTMLString 时拦截和修改资源/url 请求

Posted

技术标签:

【中文标题】在调用 UIWebView 的 loadHTMLString 时拦截和修改资源/url 请求【英文标题】:Intercept and modify resource/url requests while calling loadHTMLString of UIWebView 【发布时间】:2018-07-03 04:34:06 【问题描述】:

我正在使用loadhtmlString 方法在UIWebView 上加载一些HTML 字符串。

[self.myWebView loadHTMLString:html baseURL:baseURL];

HTML 字符串如下所示。

<html>
    <head></head>
    <body>
        <!-- [DocumentBodyStart:9ab3216e-b945-4432-141f-68164c25f0d6] -->
        <div class="jive-rendered-content"> 
            <p class="">Test description</p> 
            <a href="https://a-team-906-test.jivelandia.com/servlet/JiveServlet/previewBody/1091-102-1-1054/IMG_0005.JPG">
                <img src="https://a-team-906-test.jivelandia.com/servlet/JiveServlet/previewBody/1091-102-1-1054/IMG_0005.JPG">
            </a>
        </div>
        <!-- [DocumentBodyEnd:9ab3216e-b945-4432-141f-68164c25f0d6] -->
        <script type="text/javascript" src="web/video-loading-events.js" onerror="alert('cant load video-loading-events.js')"></script>
    </body><br>
</html>

如您所见,HTML 内容中有一个图像 URL。问题是由于身份验证问题,图像无法在 WebView 上加载。

那么我怎样才能拦截该图像 url 请求以查看引擎盖下发生了什么?如果有必要,我如何才能仅添加具有该特定请求的附加标头?

Objective-C 更可取,但也欢迎使用 Swift。提前致谢。

【问题讨论】:

【参考方案1】:

一个好的起点是使用 safari web 检查器查看当您在应用中打开 web 视图时哪些错误被注销到控制台。

您需要从您的 iPhone 启用网络检查器,然后确保您在 safari 中启用了“在菜单栏中显示开发菜单”。

完成这两项后,您可以在 safari 中导航到 Develop -&gt; &lt;Your device or simulator&gt; -&gt; &lt;your webview&gt;

从开发者窗口刷新页面,看看什么被注销。

祝你好运!

【讨论】:

以上是关于在调用 UIWebView 的 loadHTMLString 时拦截和修改资源/url 请求的主要内容,如果未能解决你的问题,请参考以下文章

CefSharp LoadHtml

PHP DOMDocument loadHTML 错误

防止 DOMDocument::loadHTML() 转换实体

ios 解决第一个页面是通过loadData或者是loadHtml时返回控制的问题

从 UIWebView 调用 javascript 函数

在 UIWebView 中没有调用 scrollViewDidScroll