我正在尝试使用https:// URL将页面加载到iOS9上的UIWebView中。加载的页面包括CSS和来自不安全服务器的图像。
E.g。页面已加载: https ://www.example.com/ ,其中包含样式表 http ://www.example.com /style.css 和图片 http ://www.example.com/image.jpg
如果原始页面是通过不安全连接(常规http)加载的,那么一切正常。 iOS8上的所有内容都可以通过HTTPS和HTTP工作。
我确实在应用程序PLIST文件中将 NSAppTransportSecurity 设置为 NSAllowsArbitraryLoads :
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
虽然通过HTTPS加载页面时,图像加载正常,但CSS文件不加载。似乎 UIWebView 阻止从安全页面加载不安全的资源。
是否有任何 UIWebView 的设置允许通过不安全的连接加载CSS?
答案 0 :(得分:17)
这与ATS无关。 WebKit强制执行混合内容策略,当通过https提供主机页面时,该策略禁止访问某些“活动”内容(JS,CSS等),而不是通过不安全的连接加载。
如果您在检查器中检查您的页面,您将在错误面板中看到此报告。
跟进:您无法关闭混合内容阻止功能。允许不安全的CSS或JS会将整个页面的安全性降低到安全性最低的资源的安全性。如果你必须通过http加载css / js的解决方案是通过http加载整个页面。这样,用户看到的UI正确反映了内容的安全性。
答案 1 :(得分:12)
在info.plist中,您需要添加以下App Transport Security密钥:
NSAppTransportSecurity Dictionary
NSAllowsArbitraryLoads Boolean YES
NSExceptionDomains Dictionary
**YOUR-DOMAIN-HERE** Dictionary
NSExceptionAllowsInsecureHTTPLoads Boolean YES
NSIncludesSubdomains Boolean YES
NSThirdPartyExceptionAllowsInsecureHTTPLoads Boolean YES
希望这对你有用。
答案 2 :(得分:5)
App Transport Security 。现在,您的应用程序可以安全地从不安全的连接。 iOS强制进行安全连接。在你的情况下这可能是冲突。
如果您的应用需要向不安全的域发出请求,则必须在应用的Info.plist文件中指定此域
所以我认为这会在为网页加载.css
文件时出现问题。
请尝试在info.plist
中指定您的域名并检查是否已加载.css
个文件。
修改强>
Spotlight:您需要在info.plist
中添加更多密钥。
查看此密钥NSThirdPartyExceptionAllowsInsecureHTTPLoads
,这允许服务域不受开发人员控制,并通过传递不安全资源向传输层添加例外。
为 App Transport Security 添加密钥的结构如下:
有关所有按键的详细信息和说明,请查看此注释 - App Transport Security Technote
答案 3 :(得分:0)
On Xcode 8.3.3(8E3004b)
已更改为
Allow Arbitrary Loads in Web Content
&gt; YES
&gt; DefaultControllerComponents
答案 4 :(得分:0)
下面的过程使我可以在WKWebView中打开不安全的内容。
我在wkwebview委托方法下面添加了
func webView(_ webView:WKWebView,didReceive挑战:URLAuthenticationChallenge,complementHandler:@转义(URLSession.AuthChallengeDisposition,URLCredential?)->无效){ completeHandler(.useCredential,URLCredential(trust:Challenge.protectionSpace.serverTrust!)) }
对于第二步,不要忘记将代理注册为:
覆盖func viewDidLoad(){ super.viewDidLoad() self.webView.navigationDelegate =自我 }
答案 5 :(得分:-1)
我使用webkit工具,但是我无法打开ssl不允许的链接(某些https链接),并且它通过此代码在swift4上工作(您必须先声明委托)
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: currentAttach.fileUrl!)
let req = URLRequest(url:url!)
self.webView!.load(req)
self.webView.navigationDelegate = self
}
}
extension ViewController: WKNavigationDelegate{
//MARK:- WKNavigationDelegate
//For Allow SSL https
func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
}
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
print(error.localizedDescription)
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
print("Strat to load")
startLoading()
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("finish to load")
stopLoading()
}
}