使用openURL刷新Safari页面:?

时间:2016-07-15 11:33:49

标签: ios openurl

我正在使用openURL:方法在Safari中打开网页,但如果该网页已在Safari中打开并且我致电openURL:,则iOS会显示已打开的网页。

它应该刷新或应该在新标签中打开。可能吗?

3 个答案:

答案 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)

我知道为时已晚,但这也许会对其他人有所帮助。我遇到了同样的问题,但已通过以下步骤解决了该问题:

  1. 在将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)
            }
        }
    }
    
  2. 之后,我添加了次要延迟,然后使用以下代码加载网址:

    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
        UIApplication.shared.openURL(url)
    })
    

此解决方案对我有用,我已经在iOS 12.0中测试了该应用程序。希望这些信息对其他人有帮助。