ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
WKWebViewの最新情報
WebコンテンツをAppのインターフェイスに組み込むためのフレームワーク「WKWebView」の最新情報をご覧ください。JavaScriptフルスクリーンAPIの使用方法、CSSビューポートユニット、検索操作の詳細について解説します。また、コンテンツブロックの制御に関する改善点、暗号化されたメディアの埋め込み、Webインスペクタの使用についても解説します。
リソース
関連ビデオ
WWDC22
-
ダウンロード
♪メロウな ヒップホップ音楽♪ ♪ 「WKWebViewの最新情報」 にようこそ WebKitチームのエンジニアの Alex Christensenです 今年は新たにAppで使える 多くの Webテクノロジーが 追加されました しかし始める前に Appに適した テクノロジーを 使用しているか 確認しましょう App内でブラウザのような 体験をしたい そして 深いカスタマイズが 必要ないのなら SFSafariViewControllerの 使用をおすすめします Appがまだ非推奨の UIWebViewを使っているなら より高速で応答性の高い WKWebViewに移行しましょう UIWebViewは将来の リリースで削除される予定です WKWebViewは Webコンテンツを操作する Appで使用するAPIです CSSベースのUIや JavaScriptで Appの一部を 書いたりできます App-bound domainsを使用して 独自のWebコンテンツとの やり取りもできます 独自のブラウザを 開発することも可能です どのような用途であっても 常に新しい機能が追加され よりリッチな Web Appの作成が可能です 今年のWKWebViewでは 4つのカテゴリの 新機能が利用可能です Webコンテンツの 新しい操作方法 コンテンツブロッカー用の 新機能 暗号化メディアと リモートWebインスペクタです まず Webコンテンツ 操作用の 新しいAPIについて ご説明します iOS 16ではAppが Webコンテンツを 操作する方法が3つあります フルスクリーンAPIを使う方法 新しいCSSビューポートユニットを使う方法 検索操作sを使う方法です フルスクリーンから 始めましょう これまで長年 JavaScriptは ブラウザで動画や キャンバスゲームなどの HTML要素をフルスクリーンに することができましたが App内でも可能になりました 簡単な例として電話で どう見えるかを説明します JavaScriptが フルスクリーンを要求し その後にユーザーや JavaScriptが解除できます App中で必要なことは WKの設定で .isElementFullscreenEnabledを trueにして webkitRequestFullscreenなどの フルスクリーンAPIを使用する Webコンテンツを 読み込むだけです そのままでも うまく動作しますが App内での遷移を カスタマイズしたい場合は WKWebView.fullscreenStateの 値を観察し Webコンテンツが フルスクリーンになったり 戻るタイミングを Appで知ることができます WebKitのフルスクリーンAPIを Appで 使用する方法は以上です
動的なビューポートサイズに応じて Webコンテンツを レイアウトできる CSSユニットも用意されました svh lvh dvhなどがCSSユニットに 新たに用意されています これにより最小 最大 動的ビューポートに基づいた レイアウトの変更が可能です Safariを例に Appでどのように 使用できるかを見てみましょう Safariで最初に ページを開くと Webページのホストと 複数のボタンが下に表示されます スクロールすると ビューポートが大きくなり ボタンがスライドして 見えなくなります Svh lvh dvhは ビューポート 異なるサイズを 測定するのに便利な単位です AppがWKWebViewの ビューポートを変更する場合 ビューポートの サイズ範囲をあらかじめ WebKitに 知らせる必要があります Swiftでは 1つの関数呼び出しで WebKitに最大および最小の エッジインセットを 通知し Webコンテンツが Appで正しく レイアウト されるようにできます iOS 16ではWKWebViewの 検索操作sの サポートを導入しています 多くのWKWebView Appでは 大量のテキストをロードし ユーザーーがそのテキストを 検索することがあります WKWebView .findInteractionEnabledを Trueに設定すると ユーザーは使い慣れたUIと command + Fのような ショートカットを使って テキストの検索ができます この機能をオンにするには コードを1行 追加するだけです WKWebView .findInteractionを通じて UIFindInteraction オブジェクトに アクセスして 検索パネルの表示や非表示 次や前の結果への移動を プログラムで行うこともできます ぜひお使いのAppで お試しください コンテンツの ブロックについては Safariでコンテンツ ブロッカーを実装するために 使用するAPIである WKContentRuleListに 新しい機能を追加しました ここではサンプルサイトのiframeに を埋め込んでいます 以前はリクエストされた URLとトップフレームのURLに対し 正規表現を使って 読み込みをブロックするか 別のアクションを 実行するかを 決めることが出来ました しかし 時には あるルールを 特定のiframe内部の 読み込みにのみ 適用させたい場合もあります この場合は 現在のフレームのURLに対して 正規表現を 実行することができます ウィキペディアを含む フレームからの 画像のみをブロックする ルールを書きたいと思います そのためには このようにJSONに if-frame-urlを追加します JSONを以前と 同様にコンパイルし WKWebViewConfigurationに 適用します すると この正規表現は リクエストを行うフレームの URLに対して実行されます このブロックルールは if-frame-url正規表現に 一致するフレームからの リクエストにのみ適用されます ここではウィキペディアの iframe内の画像の読み込みを ブロックしています コンテンツブロッカーの 実装を 真剣にお考えの方は declarariveNetRequestの 新機能を含む Safari Extensionsに 関するWWDCセッションを ご視聴ください iPadOS 16のWKWebViewの もう1つの 新機能は暗号化メディアです Encrypted Media Extensionsと Media Source Extensions APIを使用する コンテンツをiPadOS上の Appで使用可能になりました つまり AppleTV+のような プレミアムコンテンツを macOSと同様にiPadOSでも 使えるのです AppがWebブラウザ エンタイトルメントを持っている場合 リモートWebインスペクタは iOS上のSafariと同様に 製品版Appで 動作するようになります コードの追加や 変更は必要ありません サードパーティブラウザで Webインスペクタを 有効化する方法は Safariと同様です まずiOSデバイスの Safariの設定で Webインスペクタを 有効にします 次にMacのSafariの 高度な設定で 「開発」メニューを 有効にします Macと電話をつなぎ macOSのSafariの 「開発」メニューから デバイスを検出します WebインスペクタにはWebコンテンツの デバッグ用ツールが多数あります DOMの探索や JavaScriptの実行と デバッグ ページ読み込みの タイムライン表示もできます Webサイトをお持ちの方は リモートWebインスペクタを使い iOS上の サードパーティブラウザで ご自身で 検査とデバッグが 可能になりました 以上が今年 WKWebViewに 追加された 主な新しいAPIです ぜひご自身の Appでお試しください Appに最適なAPIを 使うこともお忘れなく WKWebViewで 何かできないことがあれば Feedback Assistantで 機能に関するリクエストをご提出ください お寄せいただいた リクエストを 読んだうえで開発の 優先順位を決定しています Webプラットフォームの さらなる追加機能については 「Safari Web Extensionsの最新情報」と 「SafariとWebKitの最新情報」も 忘れずに チェックしてみてください ご視聴ありがとうございました 残りのWWDCもお楽しみください ♪
-
-
2:26 - Fullscreen API support
webView.configuration.preferences.isElementFullscreenEnabled = true webView.loadHTMLString(""" <script> button.addEventListener('click', () => { canvas.webkitRequestFullscreen() }, false); </script> … """, baseURL:nil) let observation = webView.observe(\.fullscreenState, options: [.new]) { object, change in print("fullscreenState: \(object.fullscreenState)") }
-
3:50 - CSS viewport unit range inputs
let minimum = UIEdgeInsets(top: 0, left: 0, bottom: 30, right: 0) let maximum = UIEdgeInsets(top: 0, left: 0, bottom: 200, right: 0) webView.setMinimumViewportInset(minimum, maximumViewportInset: maximum)
-
4:17 - Using UIFindInteraction with WKWebView
webView.findInteractionEnabled = true if let interaction = webView.findInteraction { interaction.presentFindNavigator(showingReplace:false) }
-
5:46 - WKContentRuleList if-frame-url
let json = """ [{ "action":{"type":"block"}, "trigger":{ "resource-type":["image"], "url-filter":".*", "if-frame-url":["https?://([^/]*\\\\.)wikipedia.org/"] } }] """ WKContentRuleListStore.default().compileContentRuleList(forIdentifier: "example_blocker", encodedContentRuleList: json) { list, error in guard let list = list else { return } let configuration = WKWebViewConfiguration() configuration.userContentController.add(list) }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。