Ich versuche, eine Seite in UIWebView unter iOS9 mit https: // URL zu laden. Die geladene Seite enthält CSS und Bilder von einem unsicheren Server.
Z.B. die geladene Seite: https : //www.example.com/, die das Stylesheet http : //www.example.com/style.css und image enthält. http : //www.example.com/image.jpg
Alles funktioniert, wenn die Originalseite über eine unsichere Verbindung (normales http) geladen wird. Alles funktioniert auch auf iOS8 sowohl über HTTPS als auch über HTTP.
Ich habe NSAppTransportSecurity auf NSAllowsArbitraryLoads in der PLIST-Anwendungsdatei gesetzt:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Beim Laden der Seite über HTTPS werden die Bilder zwar OK geladen, CSS-Dateien jedoch nicht. Es scheint, als würde UIWebView das Laden unsicherer Ressourcen von einer sicheren Seite blockieren.
Gibt es eine Einstellung von UIWebView, mit der CSS über eine unsichere Verbindung geladen werden kann?
Dies hat nichts mit ATS zu tun. WebKit setzt eine Richtlinie für gemischte Inhalte durch, durch die der Zugriff auf bestimmte Klassen "aktiver" Inhalte (JS, CSS usw.) nicht über eine unsichere Verbindung geladen wird, wenn die Host-Seite über https bereitgestellt wird.
Wenn Sie Ihre Seite im Inspektor untersuchen, wird dies im Fehlerbereich angezeigt.
Follow-up: Sie können das Blockieren gemischter Inhalte nicht deaktivieren. Wenn Sie unsicheres CSS oder JS zulassen, wird die Sicherheit der gesamten Seite auf die der am wenigsten sicheren Ressource reduziert. Wenn Sie css/js über http laden müssen, können Sie die gesamte Seite über http laden. Auf diese Weise spiegelt die Benutzeroberfläche die Sicherheit des Inhalts korrekt wider.
In Ihrer info.plist müssen Sie die folgenden App Transport Security-Schlüssel hinzufügen:
NSAppTransportSecurity Dictionary
NSAllowsArbitraryLoads Boolean YES
NSExceptionDomains Dictionary
**YOUR-DOMAIN-HERE** Dictionary
NSExceptionAllowsInsecureHTTPLoads Boolean YES
NSIncludesSubdomains Boolean YES
NSThirdPartyExceptionAllowsInsecureHTTPLoads Boolean YES
Hoffentlich sollte das für Sie funktionieren.
App Transport Security überarbeitet in iOS9. Jetzt ist Ihre Anwendung vor einer unsicheren Verbindung geschützt. Und iOS zwingt zur sicheren Verbindung. Dies kann in Ihrem Fall ein Konflikt sein.
Wenn Ihre App eine Anforderung an eine unsichere Domäne stellen muss, müssen Sie diese Domäne in der Info.plist-Datei Ihrer App angeben
Ich denke, das kann zu Problemen beim Laden der .css
-Datei für Webseiten führen.
Versuchen Sie also, Ihre Domäne in info.plist
anzugeben, und prüfen Sie, ob .css
-Dateien geladen sind oder nicht.
Bearbeiten:
Spotlight: Hier müssen Sie weitere Schlüssel in info.plist
hinzufügen.
Sehen Sie sich diesen Schlüssel an NSThirdPartyExceptionAllowsInsecureHTTPLoads
. Dies ermöglicht eine Dienstdomäne, die nicht vom Entwickler gesteuert wird, und fügen Sie der Transportebene eine Ausnahme hinzu, um unsichere Ressourcen zu umgehen.
Die Struktur zum Hinzufügen von Schlüsseln für App Transport Security befindet sich unten:
Weitere Informationen und Erläuterungen zu allen Schlüsseln finden Sie in diesem Hinweis - App Transport Security Technote
Mit dem folgenden Verfahren kann ich nicht sichere Inhalte in WKWebView öffnen.
Ich habe unten die Methode wkwebview delegate hinzugefügt:
func webView (_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {completionHandler (.useCredential, URLCredential (trust: challenge.protectionSpace) .Trustential.
Vergessen Sie für den 2. Schritt nicht, den Delegierten zu registrieren als:
überschreibe func viewDidLoad () {super.viewDidLoad () self.webView.navigationDelegate = self}