J'essaie de charger une page dans UIWebView sur iOS9 en utilisant https: // URL. La page chargée comprend CSS et les images d'un server non sécurisé.
Par exemple, la page chargée: https : //www.example.com/ qui inclut la feuille de style http : //www.example.com/style.css et l'image http : //www.example.com/image.jpg
Tout fonctionne si la page d'origine est chargée via une connection non sécurisée (http standard). Tout fonctionne aussi sur iOS8 à la fois via HTTPS et HTTP.
J'ai défini NSAppTransportSecurity sur NSAllowsArbitraryLoads dans le file PLIST de l'application:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
Cependant, lors du chargement de la page via HTTPS, les images sont chargées correctement, mais les files CSS ne le sont pas. Il semble que UIWebView bloque le chargement de ressources non sécurisées à partir d'une page sécurisée.
Y a-t-il des parameters de UIWebView qui permettent de charger des CSS via une connection non sécurisée?
Ceci n'est pas lié à ATS. WebKit applique une stratégie de contenu mixte qui empêche l'access à certaines classs de contenu «actif» (JS, CSS, etc.) d'être chargé sur une connection non sécurisée lorsque la page hôte est diffusée sur https.
Si vous examinez votre page dans l'inspecteur, cela s'affichera dans le panneau des erreurs.
Suivi: Vous ne pouvez pas désactiver le blocage du contenu mixte. Autoriser CSS ou JS non sécurisé réduit la security de l'set de la page à celle de la ressource la less sécurisée. La solution si vous devez charger css / js sur http est de charger la page entière sur http. De cette façon, l'interface user vue par l'user reflète correctement la security du contenu.
Dans votre info.plist, vous devez append les keys de security de transport App suivantes:
NSAppTransportSecurity Dictionary NSAllowsArbitraryLoads Boolean YES NSExceptionDomains Dictionary **YOUR-DOMAIN-HERE** Dictionary NSExceptionAllowsInsecureHTTPLoads Boolean YES NSIncludesSubdomains Boolean YES NSThirdPartyExceptionAllowsInsecureHTTPLoads Boolean YES
J'espère que cela devrait marcher pour vous.
App Transport Security révisé dans la version iOS9. Maintenant, votre application est à l'abri d'une connection non sécurisée. Et iOS oblige à établir une connection sécurisée. Cela peut être un conflit dans votre cas.
De la documentation Apple
Si votre application doit faire une request à un domaine non sécurisé, vous devez spécifier ce domaine dans le file Info.plist de votre application.
Donc, je pense que cela peut faire un problème lors du chargement du file. .css
pour les pages Web.
Essayez donc de spécifier votre domaine dans info.plist
et vérifiez que .css
files .css
sont chargés ou non.
Modifier:
Spotlight: Vous devez append plus de keys ici dans info.plist
.
Regardez cette key NSThirdPartyExceptionAllowsInsecureHTTPLoads
cela permet un domaine de service qui n'est pas contrôlé par le développeur et ajoutez une exception à la couche Transport pour contourner les ressources non sécurisées.
La structure permettant d'append des keys pour App Transport Security est la suivante:
Pour plus de détails et d'explications sur toutes les keys, consultez cette note – Technote de security du transport App
Sur Xcode 8.3.3 (8E3004b)
Il a changé pour
App Transport Security Settings
> Allow Arbitrary Loads in Web Content
> YES