2016-08-22 2 views
2

J'ai quelques WKWebViews différents dans mon projet, ils partagent tous des cookies sur un seul WKProcessPool.Utiliser WKWebViewCookies partagés pour une demande

Maintenant je veux faire une demande sur une API REST et j'ai besoin d'envoyer exactement les cookies de cette WKWebViews à cette API. Y a-t-il un moyen d'obtenir les cookies? Tout ce que je reçois sont les cookies du NSHTTPCookieStorage mais ils ne semblent pas vraiment synchronisés avec les cookies que j'utilise dans WKWebView. Ou y a-t-il même la possibilité de faire une requête qui utilise aussi WKProcessPool?

Répondre

2

1) Si vos cookies ne sont pas uniquement HTTP, vous pouvez les obtenir en évaluant la commande JavaScript document.cookie sur webView et utilisez-les pour votre requête. Si elles sont uniquement HTTP, il semble qu'il n'y a aucune méthode de travail pour le faire. Il n'existe aucun moyen documenté pour synchroniser les cookies entre WKWebView et NSURLSession autant que je sache. 2) Une autre approche (si les cookies appartiennent au même domaine auquel appartient l'API REST) ​​- créer "background" webView avec le même pool de processus et effectuer toutes les opérations sur l'API REST via cette instance - les cookies seront ajoutés automatiquement (même HTTP- seulement):

  1. Vous pouvez régler à la demande et de la charge via loadRequest: des params (méthode/corps/tête/etc); Si votre API REST renvoie JSON, vous pouvez utiliser la commande JavaScript document.body pour l'obtenir;

  2. Obtenir le code de réponse un peu plus difficile - vous avez besoin de mettre en œuvre la méthode webView:decidePolicyForNavigationResponse: de WKNavigationDelegate et catch it. En outre, vous devez garder à l'esprit que vous pouvez effectuer seulement 1 demande dans webView simultanément. Ainsi, vous devrez peut-être créer une file d'attente de requêtes qui seront exécutées l'une après l'autre.