HTTPHeader d'une NSURLRequest -> WebView
Bonjour,
J'ai un petit soucis. Je crée une NSUrlRequest à partir d'une NSURL, et j'utilise la requête pour charger une UIWebView.
Mon problème est que la requête semble "vide", la web view se charge comme il faut, mais les éléments de la NSURLRequest sont null.
Je ne sais pas trop quoi faire.
Merci !
J'ai un petit soucis. Je crée une NSUrlRequest à partir d'une NSURL, et j'utilise la requête pour charger une UIWebView.
<br />
[color=#7034a9]NSURL[/color] *url = [[color=#7034a9]NSURL[/color] [color=#3f1281]URLWithString[/color]:[[color=#7034a9]NSString[/color] [color=#3f1281]stringWithFormat[/color]:[color=#cb2321]@"http://%@:%@/wa/r/%@?OutputMap=%@"[/color], app_url, app_port, app_name, app_theme]];<br />
[color=#108704]<br />
[color=#000000] [/color]// Load URL[/color][color=#3f1281]<br />
[color=#000000] [/color][color=#7034a9]NSURLRequest[/color][color=#000000] *requestObj = [[/color][color=#7034a9]NSURLRequest[/color][color=#000000] [/color]requestWithURL[color=#000000]:url [/color]cachePolicy[color=#000000]:[/color]NSURLRequestUseProtocolCachePolicy[color=#000000] [/color]timeoutInterval[color=#000000]:[/color][color=#340ed7]60.0[/color][color=#000000]];[/color][/color][color=#108704]<br />
// iosWV -> webview[/color]<br />
[[color=#548187]iosWV[/color] [color=#3f1281]loadRequest[/color]:requestObj];<br />
<br />
[color=#3f1281]NSLog[/color]([color=#cb2321]@"HTTPMethod %@"[/color], [requestObj [color=#3f1281]HTTPMethod[/color]]);<br />
[color=#3f1281]NSLog[/color]([color=#cb2321]@"URL %@"[/color], [requestObj [color=#3f1281]URL[/color]]);<br />
[color=#3f1281]NSLog[/color]([color=#cb2321]@"mainDocumentURL %@"[/color], [requestObj [color=#3f1281]mainDocumentURL[/color]]);<br />
[color=#cb2321]<br />
[color=#000000] [/color][color=#3f1281]NSLog[/color][color=#000000]([/color]@"allHTTPHeaderFields %@"[color=#000000], [requestObj [/color][color=#3f1281]allHTTPHeaderFields[/color][color=#000000]]);[/color][/color]<br />
[color=#3f1281]NSLog[/color]([color=#cb2321]@"HTTPBody %@"[/color], [requestObj [color=#3f1281]HTTPBody[/color]]);[color=#cb2321]<br />
[color=#000000] [/color][color=#3f1281]NSLog[/color][color=#000000]([/color]@"HTTPShouldHandlePipelining %@"[color=#000000], [requestObj [/color][color=#3f1281]HTTPShouldUsePipelining[/color][color=#000000]]);[/color][/color]<br />
Mon problème est que la requête semble "vide", la web view se charge comme il faut, mais les éléments de la NSURLRequest sont null.
2012-05-21 15:26:11.236 Genero[3112:f803] HTTPMethod GET
2012-05-21 15:26:11.238 Genero[3112:f803] URL http://localhost:6363/wa/r/gwc-demo?OutputMap=DUA_HTML5
2012-05-21 15:26:11.238 Genero[3112:f803] mainDocumentURL (null)
2012-05-21 15:26:11.239 Genero[3112:f803] allHTTPHeaderFields (null)
2012-05-21 15:26:11.239 Genero[3112:f803] HTTPBody (null)
2012-05-21 15:26:11.240 Genero[3112:f803] HTTPShouldHandlePipelining (null)
Je ne sais pas trop quoi faire.
Merci !
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Et comment je peux avoir accès à la réponse ? (NSHTTPURLResponse)
utiliser ça à la place du request ?
NSURLRequest *requestObj = [/color][color=#7034a9]NSURLRequest[/color][color=#000000] [/color]alloc[color=#000000 initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
Certes, mais à la base c'est la WebView qui s'en charge. Faire un initWithContentOfURL aura donc pour conséquence de charger une seconde fois les données... Pas très optimal [1]
Réponse qui est malheureusement inaccessible depuis UIWebView. Donc dans l'état, il est impossible de récupérer le contenu de la réponse.
[1]: Mais du coup sans doute la seule méthode valable...
Ca, c'est strictement identique à ce qu'il a écrit, à la différence près que lui utilise un constructeur de commodité qui fait exactement ce que tu as écris, mais en plus "commode" (et qui ne risque pas de leaker s'il n'y a pas de release et qu'il n'utilise pas ARC).
Sinon le initWithContentOfUrl je le fais sur quel objet ?
UIWebView n'expose aucune méthode permettant d'y avoir accès. Par conséquent, cela suppose la surcharge de méthode(s) privée(s), ce qui aura sans nul doute pour conséquence le rejet de l'application.
En fait la boite pour laquelle je bosse propose un env de dév et de déploiement d'appli business, et l'idée c'était de proposer un template xcode pour permettre à nos client d'accéder aux applis développées avec notre langage sur iOS. Sachant que les applications sont proposées comme des pages web via un serveur d'application.
La première idée était simplement de faire une webview qui charge l'url souhaitée. Mais il y a plusieurs soucis liés au comportement de la webview :
- lorsque l'application est en background, il n'y a plus de javascript qui passe, et donc pas de keepAlive (sur Android il n'y a pas ce soucis). C'est pour ça que j'essaye d'avoir le contenu du header pour obtenir une certaine URL qui me permettrait de faire un faux keepAlive
- les popup ne s'ouvrent pas, il faut faire un traitement dans shouldStartLoadWithRequest
Ca se serait pas trop grave, nos clients feraient du déploiement in-house.
(des fois, la doc, ça sert de la lire)
Je n'arrive toujours pas à avoir accès à la réponse.
En fait :
iPhone ---- URL ----> Serveur Web
Serveur Web --- page web dynamique + URL avec hash ----> iPhone
et ensuite la connexion reste et en fonction des interactions de l'utilisateur, des données transitent et la page web est mise à jour
Ce que je fais maintenant :
Dans le viewDidLoad :
- je crée l'url initiale : myURL
- je crée la requête : myRequest
- j'initialise un mutabledata : myData
- j'initialise one connection :
Ensuite j'utilise des delegate de UIWebView et NSURLConnection :
Ma webview se charge, mais je n'arrive pas à accéder aux échanges de données entre le serveur et l'iphone. Est ce que c'est parce que l'url change ?
Exemple d'URL initiale : http://10.192.50.1:6363/wa/r/gwc-demo?OutputMap=DUA_HTML5
Exemple d'URL réelle (request URL dans le leader du POST HTML) : http://10.192.50.1:6363/wa/sua/c19c7dcf31e5e7d5f65d45a6f39508a0/1/1
Ce sont deux choses qui n'ont rien à voir...
D'un coté un iPhone (avec une webview), de l'autre un serveur web qui expose des applications.
L'iPhone se connecte à une URL spécifique sur le serveur web, le serveur web retourne une page HTML dynamique.
Dès qu'il y a une interaction sur l'iPhone (par exemple saisie de texte dans un champ texte, ajout d'une ligne dans un tableau, ...), l'iPhone envoie l'information au serveur web.
Le serveur web ensuite envois une nouvelle page HTML qui remplace la page précédente (enfin cela fonctionne de manière dynamique en AJAX, toute la page n'est pas rechargée).
Et ainsi de suite.
Et j'aimerais dans mon programme iOS tracer ce flux.
Pour l'instant, j'arrive seulement à tracer la toute première étape -> l'iphone reçoit la page web initiale et l'affiche.
Et je suis coincé.