次の方法で共有


iOS 11 における WebKit と Safari の変更

iOS 11 では、Safari Web ブラウザー (Safari 11.0) の新しいバージョンが導入されています。これには、WebKit と SafariServices への変更が含まれています。 このガイドでは、これらの変更について説明します。

SafariServices

SFSafariViewController は、Web コンテンツを表示したり、アプリでユーザーを認証したりするオプションとして iOS 9 で導入されました。 その機能の詳細については、Web ビュー ガイドを参照してください。

iOS 11 では、Safari View Controller にスタイル更新プログラムが導入され、アプリと Web の間でよりシームレスなエクスペリエンスがユーザーに提供されます。 たとえば、アドレス バーを削除すると、Safari View Controller に、ミニ ブラウザーではなくアプリ内ブラウザーの操作性が提供されるようになりました。 また、次の preferredBarTintColor プロパティと PreferredControlTintColor プロパティを設定して、アプリの配色に合わせて配色をカスタマイズすることもできます。

sfViewController.PreferredControlTintColor = UIColor.White;
sfViewController.PreferredBarTintColor = UIColor.Purple;

次のコード スニペットは、次の図に示すように、バーを紫と白でレンダリングします。

SFSafariViewController bars rendered in purple and white

Safari View Controller に表示される [無視] ボタンは、DismissButtonStyle プロパティを DoneCloseCancel のいずれかに設定して変更することもできます。

sfViewController.DismissButtonStyle = SFSafariViewControllerDismissButtonStyle.Close;

Dismiss button text changed

この値は、SFSafariViewController が表示されている間に変更できます。

Safari View Controller 内に表示されるコンテンツによっては、ユーザーがスクロールしてもメニュー バーが折りたたまれないようにすることが必要な場合があります。 これは、次の BarCollapsedEnabled プロパティを false に設定することで有効になります。

var config = new SFSafariViewControllerConfiguration();
config.BarCollapsingEnabled = false;

var sfViewController = new SFSafariViewController(url, config);

Bar collapsing disabled

Apple は、iOS 11 の Safari View Controller でもプライバシーへの更新を行いました。 現在、Cookie やローカル ストレージなどの閲覧データは、Safari view controller のすべてのインスタンスではなく、アプリごとにのみ存在します。 これにより、ユーザーの閲覧アクティビティがアプリ内で非公開に維持されます。

iOS 11 では、URL のドラッグ アンド ドロップのサポートや window.open() のサポートなどの機能が SFSafariViewController にも追加されました。 これらの新機能の詳細については、「Apple の SFSafariViewController ドキュメント」を参照してください。

WebKit

WKWebView は、iOS 8 の WebKit の一部として、ユーザーに Web コンテンツを表示する手段として導入されました。 これは、SFSafariViewController よりもカスタマイズ可能で、独自のナビゲーションやユーザー インターフェイスを作成することができます。

Apple では、iOS 11 を使用した WKWebView 用に、次の 3 つの主な改善が導入されました。

  • Cookie を管理する機能
  • コンテンツのフィルター処理
  • カスタム リソースの読み込み

Cookie の管理は新しい WKHttpCookieStore クラスを通じて行われます。これにより、Cookie を追加および削除し、WKWebView に格納されているすべての Cookie を取得し、Cookie ストアで変更を監視できます。

コンテンツ フィルターを使用すると、ユーザーに表示されるコンテンツの種類を管理できます。これにより、セキュリティで保護され、家族で使いやすく、必要に応じて一部のユーザー グループのみが使用できるようにすることができます。 これは、JSON でトリガーとアクションのペアを提供することで、新しい WKContentRuleList クラスを通じて実装されます。 これらのトリガーとアクションの詳細については、Apple のコンテンツ ブロック規則に関するガイドを参照してください。

iOS 11 では、Web コンテンツのカスタム リソース読み込みを使用して WKWebView をカスタマイズできるようになりました。 これは IWKUrlSchemeHandler インターフェイスを通じて実装され、Web Kit にネイティブではない URL スキームを処理できます。 このインターフェイスには、実装する必要がある start メソッドと stop メソッドがあります。

public class MyHandler : NSObject, IWKUrlSchemeHandler {

    [Export("webView:startURLSchemeTask:")]
    public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask){
        
        // Implement a IWKUrlSchemeTask here
        var response = new NSUrlResponse(urlSchemeTask.Request.Url, "text/html", ContentLength, null);
        urlSchemeTask.DidReceiveResponse(response);
        urlSchemeTask.DidReceiveData(someData);
        urlSchemeTask.DidFinish();
    }

    [Export("webView:stopURLSchemeTask:")]
    public void StopUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask){
        throw new NotImplementedException();
    }

}

ハンドラーが実装されたら、それを使用して WKWebViewConfigurationSetUrlSchemeHandler プロパティを設定します。 次に、カスタム スキームを使用するものの URL を読み込みます。

var config = new WKWebViewConfiguration();
config.SetUrlSchemeHandler(new MyHandler(), "xamarin-asset");

webView = new WKWebView (View.Frame, config);
webView.LoadRequest (new NSUrlRequest("xamarin-asset://xamarin.com"));