webview 正在模拟器中加载,但未在设备中加载

Posted

技术标签:

【中文标题】webview 正在模拟器中加载,但未在设备中加载【英文标题】:webview is loading in simulator but not loading in device 【发布时间】:2016-06-07 09:52:55 【问题描述】:

我尝试快速加载UIWebView 到目前为止,我能够毫无问题地调用和加载 web 服务,包括模拟器中的 webview 和 json 服务。

但是当我尝试将它加载到设备中时,除了UIWebView 之外,所有其他网络服务都在工作。

let url = "http://192.168.1.233/phpProject1/MoreDetails.php?id=1234"


 UIWebView.loadRequest(webView)(NSURLRequest(URL: NSURL(string: url)!))

我检查了日志,但在设备中调用UIWebView 后没有任何反应。

问题是只有 webview 没有加载到设备中,我可以调用所有其他 web 服务,并且在模拟器中一切正常。

【问题讨论】:

为您的 webview 添加委托方法并检查设备的网络连接。如果您使用的是 ios 9.x.x 版本的设备,请在您的 plist 文件中使用 ATS(应用程序传输安全)密钥,因为您使用的是 HTTP。有关 ATS 的更多信息,请转到 gist.github.com/mlynch/284699d676fe9ed0abfa @Gagan_iOS 我已经启用了应用程序传输安全,我已经提到所有其他网络服务都运行良好。唯一的问题是 webview。在模拟器中,一切正常,但仅在设备 WEBVIEW 中无法加载。 您是否使用相同的网址“192.168.1.233/PhpProject1/MoreDetails.php?id=1234”。我试图在我的浏览器中打开它,但它没有加载。在模拟器中,我收到超时错误,因为 2016-06-07 15:52:37.620 Test[5796:329704] webViewDidStartLoad 2016-06-07 15:53:38.346 Test[5796:329704] 错误是:请求超时。 @Gagan_iOS 是我们的私有 IP。我们直接在浏览器中得到结果。 【参考方案1】:

从 ios 9 苹果引入 NSAppTransportSecurity 意味着你不能从你的设备访问 http 服务器。因此,您必须将 url 与 https 一起使用。但是您仍然可以通过在 info.plist 中添加异常来访问 http。为此,您可以查看此链接

How can I add NSAppTransportSecurity to my info.plist file?.

正如其他人所说,总是使用可达性类来检查服务器是否可达:)

【讨论】:

【参考方案2】:

192.168.1 似乎是一个私人 LAN ,您的 MAC PC 可能可以通过有线电缆(以太网电缆)访问。如果您的 iPhone 通过 WIFI 连接,可能不是同一个局域网,或者 WIFI 无法访问 192.168.1.x。检查您的连接。

Apple 提供 reachability 类,您可以使用该类检查Reachability(hostname: <your host>) 是否适用于两种设备(PC 和 iPhone)。您也可以在 gitHub 中查看快速翻译的可达性here,有很多示例。

【讨论】:

以上是关于webview 正在模拟器中加载,但未在设备中加载的主要内容,如果未能解决你的问题,请参考以下文章

PDFTron full api 未在 WebViewer 中加载

WebView 在模拟器中加载但不在设备中

Android WebView 混合内容未在 api 级别 < 21 中加载

iFrame 未在 Flex 弹出窗口中加载

CSS 未在 WKWebView 中加载

Android:WebView 中加载的图像中的像素质量降低