我正在使用openURL:
方法在Safari中打开网页,但如果该网页已在Safari中打开并且我致电openURL:
,则iOS会显示已打开的网页。
它应该刷新或应该在新标签中打开。可能吗?
答案 0 :(得分:1)
我认为没有办法做到这一点。
如果可以,可能的简单解决方案是实施SFSafariViewController
并在应用内打开您的网址。
在这个阶段,您可以像UIWebView一样控制它。
另外,你有更好的用户体验!
- (void)openLink:(NSString *)url
{
NSURL *URL = [NSURL URLWithString:url]];
if (URL) {
if ([SFSafariViewController class] != nil) {
SFSafariViewController *sfvc = [[SFSafariViewController alloc] initWithURL:URL];
sfvc.delegate = self;
[self presentViewController:sfvc animated:YES completion:nil];
}
else {
if (![[UIApplication sharedApplication] openURL:url]) {
NSLog(@"%@%@",@"Failed to open url:",[url description]);
}
}
}
else
{
// will have a nice alert displaying soon.
}
}
答案 1 :(得分:0)
您可以在打开网页后重新加载网页。
使用网络视图的重新加载方法重新加载网页
reload() - 用于重新加载当前网页。
答案 2 :(得分:0)
我知道为时已晚,但这也许会对其他人有所帮助。我遇到了同样的问题,但已通过以下步骤解决了该问题:
在将url加载到safari应用之前,我每次都清除了缓存。清除缓存的代码是:
URLCache.shared.removeAllCachedResponses()
URLCache.shared.diskCapacity = 0
URLCache.shared.memoryCapacity = 0
if let cookies = HTTPCookieStorage.shared.cookies {
for cookie in cookies {
let calendar = Calendar.current
if let twoDaysAgo = calendar.date(byAdding: .day, value: -2, to: Date()){
HTTPCookieStorage.shared.deleteCookie(cookie)
HTTPCookieStorage.shared.removeCookies(since:twoDaysAgo)
}
}
}
之后,我添加了次要延迟,然后使用以下代码加载网址:
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
UIApplication.shared.openURL(url)
})
此解决方案对我有用,我已经在iOS 12.0中测试了该应用程序。希望这些信息对其他人有帮助。