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

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

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

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

Q&A

解決済

1回答

602閲覧

UIWebViewNavigationTypeについて

nakatsu6723

総合スコア38

Swift

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

0グッド

0クリップ

投稿2017/07/04 10:18

lang

1func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 2 //ユーザの操作によるリクエストでなければ表示許可。 3 if navigationType == UIWebViewNavigationType.other { 4 return true; 5 } 6 7 var theUrl: String 8 if let unwrappedUrl = request.url?.absoluteString { 9 theUrl = unwrappedUrl 10 } else { 11 stopLoading() 12 return false; 13 } 14 15 var canStayInApp = false; 16 for url in whiteList { 17 if theUrl.range(of: url, options: NSString.CompareOptions.regularExpression) != nil { 18 canStayInApp = true; 19 break; 20 } 21 } 22 23 if !canStayInApp { 24 openInSafari(urlString: theUrl) 25 stopLoading() 26 return false; 27 } 28 29 return true 30 } 31

上記コードでwebviewで読み込み中に読み込みをそのまま続けるかどうかの処理を記述しているのですが、if navigationType == UIWebViewNavigationType.otherの部分がどういった判定をしようとしているのかがわかりません。
UIWebViewNavigationTypeでユーザーがどんな操作をしたか、otherはリンクを踏む(.linkClicked)でも、フォームを送信する(.formSubmitted)でも、リロード(.reload)でもないときという意味なのは調べてわかりました。

ただ、コメントの「ユーザの操作によるリクエストでなければ表示許可。」というのがどういう場合を想定しているのかが理解できません。

アプリ全体としてやろうとしていることはSearchBarに入力したワードを使ってYahooの検索結果ページに飛ぶという処理です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

出所はこれかな。
TECHNICAL MASTERはじめてのiOSアプリ開発第2版Xcode8+Swift3対応 - 長谷川智希 - Google ブックス

UIWebViewNavigationType.otherに該当するのは、コメントに書かれているように、ユーザの操作によるリクエストではないもの。
例えば、アプリ側で最初に開くページを指定したいなどの理由で以下のような処理を行った場合は、otherになります。

swift

1 let urlString = "https://www.google.co.jp/" 2 if let url = URL(string: urlString) { 3 let request = URLRequest(url: url) 4 webView.loadRequest(request) 5 } 6

また、以下のようなリダイレクト処理が行われた場合も、otherになります。

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta http-equiv="refresh" content="10; https://www.google.co.jp/"> 5 <title>refresh test </title> 6 </head> 7 <body> 8 <p>TEST</p> 9 </body> 10</html>

php

1<?php 2 header('Location: https://www.google.co.jp/'); 3 exit(); 4?>

追記

今回の場合、この記述をした理由とは何なのでしょうか?

otherに該当するケースは例示しました。想像してみましょう。
著者ならぬ私の回答も想像でしかありません。

起動時に表示するページやサーバサイドの都合によるページ遷移等otherに該当するものは、無条件に信頼して、以降のコードに書かれた判定は行わず、webViewでの読み込みを許可するというのが、コードの意味です。
コードの意味 イコール この記述をした理由であるべきで、他人にはそれ以上の事はわかりません。

公式見解をお求めなら、ここteratailではなく、出版社か著者にお問い合わせください。
秀和システム:書籍に関するご質問について
長谷川智希 / とむぞう(@tomzoh)さん | Twitter

投稿2017/07/04 11:49

編集2017/07/10 09:31
izkn

総合スコア1698

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

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

nakatsu6723

2017/07/10 07:41

今回の場合、この記述をした理由とは何なのでしょうか?
nakatsu6723

2017/07/15 07:26

ご親切にありがとうございます! 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問