Je travaille sur une application Web mobile utilisant sencha touch, HTML5 et phonegap comme wrapper.
J'utilise PHP-Authentication (Cookie) et ajax-request. Tout fonctionne bien sur safari ou chrome, mais après le déploiement avec phonegap (webview), cela ne fonctionne plus ...
Toute aide serait appréciée :)
Quelques détails supplémentaires:
Toutes les données de mon application sont chargées via des requêtes ajax adressées à mon composant serveur "mobile.php". J'utilise PHP-Auth de base pour authentifier l'utilisateur:
Quelle est la différence entre un site Web de safari normal et la vue Web?
je l'ai compris:
vous devez modifier le fichier phonegap_delegate.m et ajouter les éléments suivants à la méthode init:
- (id) init
{
/** If you need to do any extra app-specific initialization, you can do it here
* -jm
**/
//special setting to accept cookies via ajax-request
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage
sharedHTTPCookieStorage];
[cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
return [super init];
}
cela permet à webview d'accepter les cookies des requêtes ajax
Si vos demandes Phonegap AJAX ne déclenchent pas les rappels comme elles sont censées le faire, cela peut en être la raison.
Si la réponse que vous recevez tente de définir des cookies et que vous n'avez pas corrigé Michael, votre demande (jquery) AJAX échouera silencieusement - ni succès: ni erreur: les rappels seront déclenchés malgré le fait que le serveur a effectivement reçu la demande et envoyé une réponse. Il semble que vous deviez le faire même si vous ne vous souciez pas des cookies.
J'espère que ça aidera quelqu'un.
Je me fichais des biscuits, mais je passais juste quelques heures à essayer de comprendre pourquoi les rappels ne se déclenchaient pas!
Il existe une solution qui fonctionne aussi sur Android:
Installez le plugin https://github.com/wymsee/cordova-HTTP pour exécuter des requêtes HTTP (S) arbitraires.
Remplacez XMLHttpRequest
par le plugin alternatif (cordovaHTTP.get
ou cordovaHTTP.post
):
cordovaHTTP.post("https://example.com/login", {email: '[email protected]', passwd: "s3cr3t"}, {}, function(response) {
console.log('success');
console.log(response);
}, function(response) {
console.log('failure');
console.log(response);
});
La réponse contiendra le statut, les données et response.headers["Set-Cookie"]
, pouvant être analysés pour le nom, la valeur, le domaine, le chemin d'accès et même les indicateurs HttpOnly ;-)
Ce cookie peut être enregistré dans LocalStorage
et envoyé dans les demandes suivantes (voir le paramètre cordovaHTTP.setHeader()
ou header
des méthodes .get
/.post
) pour simuler un utilisateur authentifié sur un navigateur Web.