J'essaie de charger une page dans UIWebView sur iOS9 à l'aide de https: // URL. La page chargée inclut les CSS et les images d'un serveur 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 image http : //www.example.com/image.jpg
Tout fonctionne si la page d'origine est chargée via une connexion non sécurisée (http standard). Tout fonctionne également sur iOS8 via HTTPS et HTTP.
J'ai défini NSAppTransportSecurity sur NSAllowsArbitraryLoads dans le fichier 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 pas les fichiers CSS. On dirait que UIWebView bloque le chargement de ressources non sécurisées à partir d'une page sécurisée.
Existe-t-il un paramètre de UIWebView permettant de charger le CSS via une connexion non sécurisée?
Ce n'est pas lié à l'ATS. WebKit applique une stratégie de contenu mixte interdisant le chargement de l'accès à certaines classes de contenu "actif" (JS, CSS, etc.) via une connexion non sécurisée lorsque la page Host est diffusée via https.
Si vous examinez votre page dans l'inspecteur, vous verrez que cela est signalé dans le panneau des erreurs.
Suivi: vous ne pouvez pas désactiver le blocage de contenu mixte. Autoriser CSS ou JS non sécurisé réduit la sécurité de la page entière à celle de la ressource la moins sécurisée. Si vous devez charger css/js via http, la solution consiste à charger la page entière via http. Ainsi, l'interface utilisateur vue par l'utilisateur reflète correctement la sécurité du contenu.
Dans votre info.plist, vous devez ajouter les clés de sécurité de transport d'application 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 fonctionner pour vous.
App Transport Security révisé dans la version iOS9. Désormais, votre application est protégée d'une connexion sécurisée. Et iOS oblige à établir une connexion sécurisée. Cela peut être conflictuel dans votre cas.
Si votre application doit faire une demande à un domaine non sécurisé, vous devez spécifier ce domaine dans le fichier Info.plist de votre application.
Je pense donc que cela peut poser un problème lors du chargement du fichier .css
pour les pages Web.
Essayez donc de spécifier votre domaine dans info.plist
et vérifiez que les fichiers .css
sont chargés ou non.
Modifier:
Spotlight: Vous devez ajouter plus de clés ici dans info.plist
.
Regardez cette clé NSThirdPartyExceptionAllowsInsecureHTTPLoads
Cela permet à un domaine de service qui n'est pas contrôlé par le développeur et d'ajouter une exception à la couche de transport pour passer les ressources non sécurisées.
La structure permettant d'ajouter des clés pour App Transport Security est la suivante:
Pour plus de détails et d’explications sur toutes les clés, consultez cette note - App Transport Security Technote