[解決済み] WKWebViewで使用するCookieを設定することはできますか?
質問
既存のアプリケーションを
UIWebView
から
WKWebView
. 現在のアプリは、ユーザーのログインやセッションを
webview
を設定し
cookies
認証に必要な
NSHTTPCookieStore
. 残念ながら新しい
WKWebView
は
cookies
から
NSHTTPCookieStorage
. 他に実現する方法はありますか?
どのように解決するのですか?
iOS 11+のみ編集可能
使用方法 WKHTTPCookieStore :
let cookie = HTTPCookie(properties: [
.domain: "example.com",
.path: "/",
.name: "MyCookieName",
.value: "MyCookieValue",
.secure: "TRUE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
])!
webView.configuration.websiteDataStore.httpCookieStore.setCookie(cookie)
HTTPCookeStorageから引き寄せているので、このようにすることができます。
let cookies = HTTPCookieStorage.shared.cookies ?? []
for cookie in cookies {
webView.configuration.websiteDataStore.httpCookieStore.setCookie(cookie)
}
iOS 10以下の古い回答
最初のロードリクエストでクッキーを設定する必要がある場合、NSMutableURLRequestで設定することができます。 クッキーは特別にフォーマットされたリクエストヘッダに過ぎないので、このように実現することができます。
WKWebView * webView = /*set up your webView*/
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/index.html"]];
[request addValue:@"TeskCookieKey1=TeskCookieValue1;TeskCookieKey2=TeskCookieValue2;" forHTTPHeaderField:@"Cookie"];
// use stringWithFormat: in the above line to inject your values programmatically
[webView loadRequest:request];
ページ上の後続のAJAXリクエストにクッキーを設定する必要がある場合、WKUserScriptを使用して、次のようにドキュメント開始時にjavascriptを介してプログラム的に値を設定することで実現できます。
WKUserContentController* userContentController = WKUserContentController.new;
WKUserScript * cookieScript = [[WKUserScript alloc]
initWithSource: @"document.cookie = 'TeskCookieKey1=TeskCookieValue1';document.cookie = 'TeskCookieKey2=TeskCookieValue2';"
injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
// again, use stringWithFormat: in the above line to inject your values programmatically
[userContentController addUserScript:cookieScript];
WKWebViewConfiguration* webViewConfig = WKWebViewConfiguration.new;
webViewConfig.userContentController = userContentController;
WKWebView * webView = [[WKWebView alloc] initWithFrame:CGRectMake(/*set your values*/) configuration:webViewConfig];
この2つのテクニックを組み合わせることで、Native App LandからWeb View LandにCookieの値を転送するための十分なツールを手に入れることができます。 より詳細な情報は Mozilla のページで、cookie javascript API を公開しています。 より高度なCookieが必要な場合。
ああ、Appleが多くの UIWebView の巧妙な機能 . 今後、サポートされるかどうかは分かりませんが、早く対応してくれることを期待しています。 これが役に立つことを願っています。
関連
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] jQueryでクッキーを設定/解除するにはどうすればよいですか?
-
[解決済み] ローカルストレージとCookieの比較
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] UILabelで複数行のテキストを表示する
-
[解決済み] コア・データ エンティティの全インスタンスを削除する最短の方法
-
[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン
-
[解決済み] ぼかしの入ったオーバーレイビューの作成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
制御が非ボイド関数の終了に達する
-
[解決済み] 制約条件の変更をアニメーションで表現するには?
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] UITextFieldの最大文字数を設定します。
-
[解決済み] iOSで現在のデバイスの言語を取得するには?
-
[解決済み] UITextFieldのテキストインセット?
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み] Cocoapods警告 - CocoaPodsがプロジェクトの基本構成を設定しなかった理由は、プロジェクトに既にカスタム構成が設定されているためです。