IOS 11의 WebKit 및 Safari 변경 내용WebKit and Safari changes in iOS 11

iOS 11에는 WebKit 및 SafariServices에 대 한 변경 내용이 포함 된 safari 웹 브라우저의 새 버전 (Safari 11.0)이 도입 되었습니다.iOS 11 introduces a new version of the Safari web browser – Safari 11.0 – which includes changes to WebKit and SafariServices. 이 가이드는 이러한 변경 내용을 살펴봅니다.This guide explores these changes.

SafariServicesSafariServices

SFSafariViewController는 웹 콘텐츠를 표시 하거나 앱에서 사용자를 인증 하는 옵션으로 iOS 9에서 도입 되었습니다.SFSafariViewController was introduced in iOS 9 as an option for displaying web content or authenticating users from your app. 해당 기능에 대 한 자세한 내용은 웹 보기 가이드에서 찾을 수 있습니다.More information on its features can be found in the Web Views guide.

iOS 11은 Safari 보기 컨트롤러에 대 한 스타일 업데이트를 도입 하 여 사용자에 게 앱과 웹 간의 원활한 환경을 제공 합니다.iOS 11 has introduced style updates to the Safari View Controller, giving your users a more seamless experience between an app and the web. 예를 들어 주소 표시줄을 제거 하면 이제 미니 브라우저가 아닌 앱 내 브라우저의 느낌이 Safari 보기 컨트롤러에 제공 됩니다.For example, the removal of the address bar now gives the Safari View Controller the feel of an in-app browser, rather than a mini-browser. preferredBarTintColorPreferredControlTintColor 속성을 설정 하 여 응용 프로그램의 색 구성표에 맞게 색 구성표를 사용자 지정할 수도 있습니다.You can also customize the color scheme to fit in with the color scheme of your app by setting the preferredBarTintColor and PreferredControlTintColor properties:

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

다음 코드 조각에서는 다음 이미지에 표시 된 것 처럼 막대를 자주색 및 흰색으로 렌더링 합니다.The following code snippet renders the bars in purple and white, as displayed in the following image:

자주색 및 흰색으로 렌더링 된 SFSafariViewController 막대

Safari 뷰 컨트롤러에 표시 되는 DismissButtonStyle 해제 단추는 속성을 Done, Close또는 Cancel로 설정 하 여 변경할 수도 있습니다.The Dismiss button presented in the Safari View Controller can also be changed by setting the DismissButtonStyle property to either Done, Close, or Cancel:

sfViewController.DismissButtonStyle = SFSafariViewControllerDismissButtonStyle.Close;

해제 단추 텍스트 변경

가 표시 되는 동안 SFSafariViewController 이 값을 변경할 수 있습니다.This value can be changed while SFSafariViewController is presented.

Safari 뷰 컨트롤러 내에 표시 되는 콘텐츠에 따라 사용자가 스크롤하면 메뉴 모음이 축소 되지 않도록 해야 할 수도 있습니다.Depending on the content that is displayed inside a Safari View Controller, it might be necessary to ensure that the menu bars don't collapse as the user scrolls. BarCollapsedEnabled 속성을로 false설정 하 여이 작업을 수행할 수 있습니다.This is enabled by setting the new BarCollapsedEnabled property to false:

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

var sfViewController = new SFSafariViewController(url, config);

막대 축소 사용 안 함

또한 Apple은 iOS 11의 Safari 보기 컨트롤러에서 개인 정보를 업데이트 했습니다.Apple has also made updates to privacy in the Safari View Controller in iOS 11. 이제 쿠키 및 로컬 저장소와 같은 데이터 검색은 Safari 뷰 컨트롤러의 모든 인스턴스가 아닌 앱 별로 존재 합니다.Now, browsing data such as cookies and local storage only exist on a per-app basis, rather than across all instances of Safari view controller. 그러면 앱 내에서 사용자 검색 작업을 비공개로 유지 합니다.This keeps user browsing activity private within your app.

Url에 대 한 끌어서 놓기 지원 및에 대 window.open() 한 지원 등의 추가 기능도 iOS 11에서에 SFSafariViewController 추가 되었습니다.Additional features such as drag and drop support for URLs and support for window.open() have also been added to SFSafariViewController in iOS 11. 이러한 새로운 기능에 대 한 자세한 내용은 Apple의 SFSafariViewController 설명서에서 확인할 수 있습니다.You can find more information about these new features in Apple's SFSafariViewController documentation.

WebKitWebKit

WKWebView는 사용자에 게 웹 콘텐츠를 표시 하는 수단으로 iOS 8의 WebKit 일부로 도입 되었습니다.WKWebView was introduced as part of WebKit in iOS 8 as a means of displaying web content to your user. 보다 SFSafariViewController사용자 지정이 훨씬 더 사용자 지정 되므로 사용자가 직접 탐색 및 사용자 인터페이스를 만들 수 있습니다.It's much more customizable than SFSafariViewController, allowing you to create your own navigation and user interface.

Apple은 iOS 11에 대 한 WKWebView 세 가지 주요 개선 사항을 도입 했습니다.Apple has introduced three main improvements for WKWebView with iOS 11:

  • 쿠키를 관리 하는 기능The ability to manage cookies
  • 콘텐츠 필터링Content filtering
  • 사용자 지정 리소스 로드Custom resource loading.

쿠키 관리는 새 WKHttpCookieStore 클래스를 통해 수행 됩니다 .이 클래스를 사용 하 여 쿠키를 추가 및 삭제 하 고, WKWebView에 저장 된 모든 쿠키를 가져오고, 쿠키 저장소에서 변경 내용을 관찰할 수 있습니다.Cookie management is done through the new WKHttpCookieStore class, which allows you to add and delete cookies, to get all the cookies stored in a WKWebView, and to observe the cookie store for changes.

콘텐츠 필터링을 사용 하면 사용자에 게 표시 되는 콘텐츠 형식을 관리 하 여 안전 하 고 잘 이해할 수 있으며, 필요한 경우 선택 된 사용자 그룹에만 사용할 수 있습니다.Content filtering allows you to manage the type of content that your user will see, allowing you to make sure it's secure, family friendly, and, if necessary, only available to a select group of users. JSON에서 트리거와 작업 쌍을 WKContentRuleList 제공 하 여 새 클래스를 통해 구현 됩니다.This is implemented through the new WKContentRuleList class, by providing pairs of triggers and actions in JSON. 이러한 트리거 및 작업에 대 한 자세한 내용은 Apple의 콘텐츠 차단 규칙 가이드에서 찾을 수 있습니다.More information on these triggers and actions can be found in Apple's Content Blocking Rules guide.

이제 iOS 11에서 웹 콘텐츠에 대 WKWebView 한 사용자 지정 리소스 로드를 사용 하 여 사용자 지정할 수 있습니다.iOS 11 now allows you to customize WKWebView with custom resource loading for your web content. 이는 웹 키트의 IWKUrlSchemeHandler 기본이 아닌 URL 체계를 처리할 수 있는 인터페이스를 통해 구현 됩니다.This is implemented through the IWKUrlSchemeHandler interface, which lets you handle URL Schemes that are not native to Web Kit. 이 인터페이스에는 구현 해야 하는 시작 및 중지 메서드가 있습니다.This interface has a start and stop method that must be implemented:

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

}

처리기가 구현 되 면이를 사용 하 여 SetUrlSchemeHandler WKWebViewConfiguration에 대 한 속성을 설정 합니다.Once the handler has been implemented, use it to set the SetUrlSchemeHandler property on the WKWebViewConfiguration. 그런 다음 사용자 지정 스키마를 사용 하는 항목의 URL을 로드 합니다.Then, load the URL of something that uses the custom scheme:

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

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