允许 UIWebView 在没有 Internet 连接的情况下加载 http://localhost:port/path URI

Posted

技术标签:

【中文标题】允许 UIWebView 在没有 Internet 连接的情况下加载 http://localhost:port/path URI【英文标题】:Allow UIWebView to load http://localhost:port/path URIs without an Internet connection 【发布时间】:2011-03-13 15:55:26 【问题描述】:

我正在开发一个 iPad 应用程序,该应用程序具有一个在高端口上侦听的嵌入式 HTTP 服务器,并且我正在使用 UIWebView 从这个 HTTP 服务器加载页面。

对于应用程序的功能,重要的是它在没有可用网络连接时工作。

UIWebView 正在加载格式为 http://localhost:port/path 的 URL

当我在 iPad 上禁用 Wi-Fi 并运行应用程序时,UIWebView 的委托会收到带有以下 NSError 对象的 webView:didFailLoadWithError: 消息:

Error Domain=NSURLErrorDomain Code=-1009 UserInfo=0x1b4a50 "no Internet connection"

很明显,SDK 很聪明,检测到它没有 Internet 连接,但应该可以在没有 Internet 连接的情况下访问 127.0.0.1/localhost/::1。我将向 Apple 报告此错误,但同时在此征求有关此 SDK 错误的可能解决方法的建议。

请注意:更改应用程序的架构不在此问题的范围内。

【问题讨论】:

为什么不用 UIWebView 的loadhtmlString:baseURL: 方法加载页面? 我不能真正深入细节(因此问题的最后一句),但有充分的理由说明我不能使用涉及需要处理外部脚本、样式和图像的方法页面引用的资源以及在初始页面加载开始之前不容易确定的资源。嵌入式 Web 服务器就像一种代理服务器,它通过 Wi-Fi/3G 网络访问以外的方式获取资源。 【参考方案1】:

您可能想研究定义自己的方案并使用NSURLProtocol 实现它,而不是运行 HTTP 服务器。这将允许您在无需实现 HTTP 协议的情况下处理 URL 的加载,并且可以通过 SDK 解决此问题,如果您没有网络连接,则 HTTP 协议会提前失败。

【讨论】:

谢谢。这正是我想要的,我什至可以让我的 NSURLProtocol 子类响应 httphttps 协议,有效地覆盖默认平台 HTTP 行为。太棒了。 看起来问题仅与 UIWebView 控件有关,而不是在较新的控件中 - WKWebView。后面的控件允许 http 本地主机文件访问,而无需验证 Internet 连接/故障。我在我的应用程序中注意到下载视频的这种行为。我的应用在UIWebView (ios 7) 和WKWebView (iOS 8) 中播放<video>

以上是关于允许 UIWebView 在没有 Internet 连接的情况下加载 http://localhost:port/path URI的主要内容,如果未能解决你的问题,请参考以下文章

iOS UIWebView 允许所有三方cookie

UIWebView:使框架适合视图大小,允许在 UISplitViewController 上的该框架内滚动

Xcode 和 WebView:如果没有 Internet 连接,则加载本地 html(后备)

UIWebview 和 UIScrollview

iOS UIWebview,禁用双击,允许点击 WKWebview

在 UIWebView 中禁用用户选择