Změny WebKit a Safari v iOS 11

iOS 11 zavádí novou verzi webového prohlížeče Safari – Safari 11,0 – včetně změn v WebKit a SafariServices. Tato příručka tyto změny prozkoumá.

SafariServices

SFSafariViewController byla představena v systému iOS 9 jako možnost zobrazení webového obsahu nebo ověřování uživatelů z vaší aplikace. Další informace o jeho funkcích najdete v průvodci webovými zobrazeními .

iOS 11 představilo aktualizace stylu pro kontroler zobrazení Safari, takže uživatelé budou mít k plynulější možnosti mezi aplikací a webem. Například odebrání panelu Adresa nyní dává kontroleru zobrazení Safari dojem, že se jedná o prohlížeč v prohlížeči v aplikaci, a ne na zkráceném prohlížeči. Můžete také přizpůsobit barevné schéma tak, aby odpovídalo barevnému schématu vaší aplikace, a to nastavením preferredBarTintColor vlastností a PreferredControlTintColor :

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

Následující fragment kódu vykresluje pruhy na fialové a bílé, jak je znázorněno na následujícím obrázku:

SFSafariViewController pruhy vykreslené fialově a bíle

Tlačítko Zavřít zobrazené v kontroleru zobrazení Safari lze také změnit nastavením DismissButtonStyle vlastnosti na hodnotu Done , Close nebo Cancel :

sfViewController.DismissButtonStyle = SFSafariViewControllerDismissButtonStyle.Close;

Text tlačítka pro zavření se změnil

Tuto hodnotu lze změnit, pokud SFSafariViewController je prezentována.

V závislosti na obsahu, který se zobrazí v rámci kontroleru zobrazení Safari, může být nutné zajistit, aby se řádky nabídek při posunu uživatele nesbalovaty. Tato možnost je povolena nastavením nové BarCollapsedEnabled vlastnosti na false :

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

var sfViewController = new SFSafariViewController(url, config);

Pruhy sbalení zakázané

Společnost Apple taky v iOS 11 provedla aktualizace ochrany osobních údajů v řadiči zobrazení Safari. Data, jako jsou soubory cookie a místní úložiště, teď existují jenom na základě jednotlivých aplikací, ale ne napříč všemi instancemi kontroleru zobrazení Safari. Tím se zachová aktivita procházení uživatelům soukromá v rámci vaší aplikace.

Další funkce, jako je podpora přetažení pro adresy URL a podpora pro, se window.open() taky přidaly do SFSafariViewController v iOS 11. Další informace o těchto nových funkcích najdete v dokumentaci k SFSafariViewController společnosti Apple.

WebKit

WKWebView byla představena jako součást WebKit v systému iOS 8 jako způsob zobrazení webového obsahu uživateli. Je mnohem přizpůsobitelnější, než umožňuje SFSafariViewController vytvořit vlastní navigaci a uživatelské rozhraní.

Společnost Apple zavedla tři hlavní vylepšení pro WKWebView iOS 11:

  • Možnost spravovat soubory cookie
  • Filtrování obsahu
  • Vlastní načtení prostředků

Správa souborů cookie se provádí prostřednictvím nové WKHttpCookieStore třídy, která umožňuje přidávat a odstraňovat soubory cookie pro získání všech souborů cookie uložených v WKWebView a ke sledování změn v úložišti souborů cookie.

Filtrování obsahu umožňuje spravovat typ obsahu, který uživatel uvidí, což vám umožní zajistit, aby byl zabezpečený, rodinný a v případě potřeby dostupný jenom pro vybranou skupinu uživatelů. To je implementováno prostřednictvím nové WKContentRuleList třídy tím, že poskytuje páry triggerů a akcí ve formátu JSON. Další informace o těchto aktivačních událostech a akcích najdete v průvodci pravidly blokování obsahu společnosti Apple.

iOS 11 teď umožňuje přizpůsobení WKWebView vlastním nahráváním prostředků vašeho webového obsahu. To je implementováno prostřednictvím IWKUrlSchemeHandler rozhraní, které umožňuje zpracovat schémata URL, která nejsou nativní pro webovou sadu. Toto rozhraní má metodu Start a stop, která musí být implementovaná:

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();
    }

}

Po implementaci obslužné rutiny ji použijte k nastavení SetUrlSchemeHandler vlastnosti v WKWebViewConfiguration . Pak načtěte adresu URL něčeho, co používá vlastní schéma:

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

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