我有一个iOS应用程序,尝试在一个线程中运行HTTP Web服务器,并使用单个WKWebView指向该Web服务器的UI(即“Electron”样式的应用程序)。但是,我无法使WKWeView显示 - 甚至不能请求由Web服务器提供的内容。
如果我在Web服务器上进行编程式的HTTP请求,应用程序日志会显示已进行请求,并且响应有效负载包含我预期的内容。
然而,如果我尝试在WKWebView中加载
如果我将Web视图指向HTTPS URL(例如,
如果我将Web视图指向HTTP URL(例如,
我在WKWebView上安装了导航代理;它显示已开始临时导航,但没有调用其他加载进度委托方法。
应用程序日志中没有其他错误或进度指示器。大约30秒后,我会收到日志消息:
据我所知,大多数这些标签实际上不应该需要,但是为了排除权限问题作为问题源,我已经将它们包含在内。
对于这里发生的情况有什么想法吗?甚至有什么诊断可能正在发生的想法吗?
如果我在Web服务器上进行编程式的HTTP请求,应用程序日志会显示已进行请求,并且响应有效负载包含我预期的内容。
然而,如果我尝试在WKWebView中加载
http://127.0.0.1:8000
(或任何其他端口),则不会加载任何Web内容。Web服务器甚至没有显示请求被发出。如果我将Web视图指向HTTPS URL(例如,
https://google.com/
),它会显示预期的内容。如果我将Web视图指向HTTP URL(例如,
http://neverssl.com/
),它会显示预期的内容。我在WKWebView上安装了导航代理;它显示已开始临时导航,但没有调用其他加载进度委托方法。
应用程序日志中没有其他错误或进度指示器。大约30秒后,我会收到日志消息:
[ProcessSuspension] 0x1321c7eb0 - TimedActivity::activityTimedOut:
再等大约30秒后,我收到了:
2022-10-16 07:54:25.373833-0700 Positron[51762:92124656] [Process] 0x130888218 - [pageProxyID=6, webPageID=7, PID=51772] WebPageProxy::didFailProvisionalLoadForFrame: frameID=3, isMainFrame=1, domain=NSURLErrorDomain, code=-1001, isMainFrame=1
根据错误代码,这似乎是超时问题。但是,在 Web 服务器上没有进行请求,因此不是 Web 服务器超时。
如果我在 macOS 上使用相同的服务器和 WKWebView 代码,将 WKWebView 的 url 设置为 http://127.0.0.1:8000
,则会对内部 Web 服务器发出请求,并显示页面。
我在解决此问题时进行了各种搜索,建议是与应用程序权限有关的问题-但是我已经在应用程序的 Info.plist 中设置了可能与此问题相关的所有密钥:
<dict>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsLocalNetworking</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>127.0.0.1</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
据我所知,大多数这些标签实际上不应该需要,但是为了排除权限问题作为问题源,我已经将它们包含在内。
对于这里发生的情况有什么想法吗?甚至有什么诊断可能正在发生的想法吗?
WKWebView
中禁用访问控制检查,但似乎没有很好的文档说明如何做到这一点。 - Mr Hery