質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

886閲覧

【swift】WebViewで実行している処理をJavaScriptで記載できるのか

syosinsya_swift

総合スコア62

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2019/12/12 06:17

JavaScriptCoreというものを最近知り、勉強したいと思っています。
なかなか調べても良いサンプルなどが出てこなかったので質問させてください。

今、swiftのWebviewで以下のような処理を書いています
1ログイン
2ログインOKであれば、OK処理へ遷移

これをJavaScriptに置き換えることができるのでしょうか?
WebViewのdelegateなどがどうなるのかが理解できておらず、教えていただけるとありがたいです。

今書いているソースを記載します。

Webview

1 2import Foundation 3import WebKit 4import SafariServices 5import UIKit 6 7var isOkServiceText = "{\"status\":\"OK\"}" 8 9class IMSWebView: CommonViewController, WKNavigationDelegate { 10 11 //WebViewの生成 12 var articleWebView: WKWebView! 13 14 //URL 15 var siteUrl: URL! 16 17 // ページURL情報 18 var loadedHtmlString: String = "" 19 var lastUrl: String = "" 20 21 // 初期ログイン情報 22 var isLogin = false 23 24 // インジケータ 25 var activityIndicatorView = UIActivityIndicatorView() 26 27 override func viewDidLoad() { 28 29 // viewDidLoad 30 super.viewDidLoad() 31 32 // URLの初期設定 33 self.siteUrl = URL(string:getOKServiceUrl()) 34 35 WKWebsiteDataStore.default().removeData(ofTypes: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeOfflineWebApplicationCache], modifiedSince: Date(timeIntervalSince1970: 0), completionHandler: {}) 36 37 // WebViewを生成. 38 articleWebView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)) 39 articleWebView.navigationDelegate = self 40 articleWebView.translatesAutoresizingMaskIntoConstraints = false 41 42 // subViewにあったviewを削除 43 let subviews = self.view.subviews 44 for subview in subviews { 45 subview.removeFromSuperview() 46 } 47 48 // navigationbarの戻るボタンの非表示 49 self.navigationItem.setHidesBackButton(true, animated: false) 50 51 // subViewに加える 52 self.view.addSubview(articleWebView) 53 54 // インジケータ生成 55 activityIndicatorView.center = view.center 56 activityIndicatorView.style = .whiteLarge 57 activityIndicatorView.color = .gray 58 view.addSubview(activityIndicatorView) 59 } 60 61 override func viewWillAppear(_ animated: Bool) { 62 // 初期ページのロード 63 let request: URLRequest = URLRequest(url: siteUrl) 64 65 //該当ページへジャンプ 66 articleWebView.load(request) 67 articleWebView.allowsBackForwardNavigationGestures = true 68 69 // インジケータスタート 70 activityIndicatorView.startAnimating() 71 } 72 73 override func viewWillDisappear(_ animated: Bool) { 74 // ローディング中止 75 articleWebView.stopLoading() 76 } 77 78 //通信終了 79 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 80 81 // インジケータ終了 82 self.activityIndicatorView.stopAnimating() 83 84 //cookie取得 85 let cookieStore = webView.configuration.websiteDataStore.httpCookieStore 86 cookieStore.getAllCookies() { (cookies) in 87 for cookie in cookies { 88 print("cookie名:(cookie.name)") 89 print("cookieドメイン:(cookie.domain)") 90 //Cookieのセット 91 HTTPCookieStorage.shared.setCookie(cookie) 92 } 93 } 94 95 // WKWebViewで表示されるJSONを取得する 96 webView.evaluateJavaScript("document.body.innerText", completionHandler: { (html, error) -> Void in 97 if html is String { 98 99 self.loadedHtmlString = (html as! String) 100 self.lastUrl = (webView.url?.absoluteString)! 101 102 // dataを取り出す 103 var data:Data? 104 105 let replace = self.loadedHtmlString.replace(target: " ", withString: "").replace(target: "\n", withString: "").replace(target: "\r", withString: "").replace(target: "\t", withString: "") 106 107 data = replace.data(using: .utf8)! 108 109 if replace == isOkServiceText { 110 //ログインOK 111 self.goNextView() 112 } 113 } 114 115 }) 116 } 117 118 func goNextView(){ 119 // OK処理へ遷移 120 } 121 122 //ネットワークに繋がらない場合など(中断以外) 123 func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { 124 let errorCode = (error as NSError).code 125 126 // インジケータ終了 127 self.activityIndicatorView.stopAnimating() 128 129 // エラーメッセージ 130 apiErrorDialog("(Message.TUSHIN_ERROR)\nエラーコード:(errorCode)") 131 } 132} 133

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問