2015-10-12 55 views
1

SFSafariViewController允许网页访问存储在Safari中的cookie。我想用SFSafariViewController执行一些后台任务来利用cookie。但是我不希望用户看到SFSafariViewController。如何隐藏SFSafariViewController?

有没有办法隐藏SFSafariViewController并允许用户在显示SFSafariViewController时触摸屏幕?

回答

2
Class SFSafariViewControllerClass = NSClassFromString(@"SFSafariViewController"); 
if (SFSafariViewControllerClass) { 
    id safController = [[SFSafariViewControllerClass alloc] initWithURL:[NSURL URLWithString:urlString]]; 

    UIViewController *windowRootController = [[UIViewController alloc] init]; 

    self.secondWindow = [[UIWindow alloc] initWithFrame:CGRectZero]; 
    self.secondWindow.rootViewController = windowRootController; 
    [self.secondWindow makeKeyAndVisible]; 
    [self.secondWindow setAlpha:0]; 

    [windowRootController presentViewController:safController animated:YES completion:^{ 
     [self.secondWindow.rootViewController dismissViewControllerAnimated:NO completion:NULL]; 
    }]; 
} 

您可以使用代码隐藏SFSafariViewControllerClass

+0

这对我有效,谢谢! – hungbm06

+1

将alpha设置为零不再适用于iOS 10.您可以将主窗口window.windowLevel设置为较高的数字,然后将其设置回0. – Brian

+0

@Away Lin在提交时遇到了任何拒绝您的应用程序的情况?我在问这个问题,因为在答案中使用SFSafariViewControllerClass会违反第二个答案中指出的法律问题 –

2

如果你打算提交到App Store不要这样做。

https://developer.apple.com/app-store/review/guidelines/

5.1.1(ⅳ)SafariViewContoller必须用于可视地向用户提供信息;控制器可能不会被其他视图或图层隐藏或遮挡。此外,应用程序可能不会使用 SafariViewController来跟踪用户,而他们不知情并且 同意。

如果您需要访问cookie,请改为使用WKWebView。请参阅Getting all cookies from WKWebView。不过,这些cookie不会与Safari共享。