Sencha touch、HTML5、phonegapをラッパーとして使用するモバイルWebアプリに取り組んでいます。
PHP-Authentication(Cookie)とajax-requestsを使用しています。サファリまたはクロームではすべて正常に動作しますが、phonegap(webview)を使用してデプロイした後は、動作しなくなります...
どんな助けもいただければ幸いです:)
詳細:
アプリのすべてのデータは、サーバーコンポーネント「mobile.php」へのajaxリクエストを介して読み込まれます。私は基本的なPHP-Authを使用してユーザーを認証します。
通常のサファリWebサイトとWebビューの違いは何ですか?
私はそれを考え出した:
phonegap_delegate.mファイルを変更し、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];
}
これにより、webviewはajaxリクエストからのCookieを受け入れることができます
Phonegap AJAXリクエストが想定どおりにコールバックを起動しない場合は、これが理由である可能性があります。
受け取った応答がCookieの設定を試み、Michaelの修正を行っていない場合、(jquery)AJAXリクエストは静かに失敗します-成功:またはエラー:コールバックは発生しませんがサーバーが実際にリクエストを受信してレスポンスを送信したという事実。Cookieを気にしない場合でも、これを行う必要があるようです。
これが誰かに役立つことを願っています。
私はCookieを気にしませんでしたが、コールバックが起動しなかった理由を理解するために数時間を費やしました。
Androidにも機能するソリューションがあります:
プラグインをインストールします https://github.com/wymsee/cordova-HTTP 任意のHTTP(S)リクエストを実行します。
XMLHttpRequest
を代替プラグイン(_cordovaHTTP.get
_または_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);
});
_
応答には、ステータス、データ、および_response.headers["Set-Cookie"]
_が含まれ、名前、値、ドメイン、パス、さらにはHttpOnlyフラグについても解析できます;-)
上記のCookieはLocalStorage
に保存し、後続のリクエストで送信して(_.get
_/_.post
_メソッドのcordovaHTTP.setHeader()
またはheader
パラメーターを参照)、シミュレートできます。デスクトップブラウザで認証されたユーザー。