UIWebView et site mobile
J'ai un petit probleme avec une UIwebview et un site pour mobile.
Quand j y accede via safari de l iphone, pas de soucis, je suis bien sur la version mobile du site.
Par contre qd j essaie a travers un UiWebView que j ai programmé, la le site ne le detecte pas et me renvoie vers le site web "classique".
Avez vous une idée?
merci
Quand j y accede via safari de l iphone, pas de soucis, je suis bien sur la version mobile du site.
Par contre qd j essaie a travers un UiWebView que j ai programmé, la le site ne le detecte pas et me renvoie vers le site web "classique".
Avez vous une idée?
merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Quand Safari mobile est utilisé, il envoie un user-agent ressemblant à cela :
[tt]Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3[/tt].
Par contre quand tu utilises directement un UIWebView, le user-agent est différent :
[tt]WebApps/1.0 CFNetwork/339.3 Darwin/9.4.1[/tt].
Donc pour simuler un comportement Safari mobile dans ton UIWebVoew, modifie ce header user-agent.
Cela passe par la création d'une NSMutableURLRequest dans laquelle il faudra mettre le bon user-agent (par setValue:forHTTPHeaderField:), puis par le chargement de cette requête dans l'UIWebView en utilisant la méthode loadRequest:.
je teste ca ce soir!
Merci
Le user-agent est bien modifié, mais au final, ce que reçoit le serveur est différent.
Par contre, le user-agent reçu par le serveur est :
[tt]Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_0 like Mac OS X; fr-fr)... [/tt]
Donc si les scripts de détection côté serveur sont efficaces, une UIWebView devrait charger le site version iPhone.
Tu peux tester les user-agent en utilisant le site www.useragentstring.com.
J'ai eu beau chercher, pas trouvé de solution
Car les tests faits (UIWebView et simulator) chez moi affichent bien la version iPhone des sites (j'ai testé sur 2 sites, donc macgeneration entre autre).
Un des sites en question est transilien.mobi
Merci
Pour palier à ce problème, on va passer par le delegate webView: shouldStartLoadWithRequest:navigationType: qui est appelé lorsque le webkit a créé une requête mais ne l'a pas encore émise vers le serveur web.
Cela fonctionne chez moi pour transilien.mobi.
Bizarrement, l'argument shouldStartLoadWithRequest: est prototypé en NSURLRequest, mais l'objet passé est réellement un NSMutableURLRequest (un [tt]NSLog(@%@", [request className]);[/tt] le confirme d'ailleurs).