【问题标题】:iOS :: Web site does not work in iOS Safari and UIWebViewiOS :: 网站在 iOS Safari 和 UIWebView 中不起作用
【发布时间】:2017-03-19 04:32:58
【问题描述】:

我有一个带有 UIWebView 的应用程序,它加载了一个网站 https://app.bridallive.com/。以前它在 iPad 上运行良好,但现在不行。 它既不会在 UIWebView(在最简单的应用程序中)也不会在 iOS Safari 中加载。在 Mac OS 中运行良好。 我试图用以下方法诊断它:

-(void) loadWebSite {
    NSURL * url = [NSURL URLWithString:@"https://app.bridallive.com/#/dashboard?iPadApp=true"];
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest: request];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self loadWebSite];
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    NSLog(@"Error : %@",error);
}

NSAppTransportSecurity 设置为 YES,并且网站具有有效且受信任的证书。

这是我在以后的实验中使用的:

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self loadWebSite];
}

但这不会给出任何错误。

谁能建议一种在 iOS 中诊断此问题的方法?

最好的问候, 安德烈

【问题讨论】:

  • 你启用NSAppTransportSecurity标志了吗?
  • 是的,这是标志设置为 YES 并且网站具有可信且正确的 SSL 证书。
  • 你能用你试图打开url的代码显示代码吗?
  • -(void) loadWebSite { NSURL * url = [NSURL URLWithString:@"https://app.bridallive.com/#/dashboard?iPadApp=true"]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest: request]; } - (void)viewDidLoad { [super viewDidLoad]; [self loadWebSite]; } 我也试过:` -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [自加载网站]; } `
  • loadWebSite 函数更详细一点?

标签: ios objective-c iphone ipad uiwebview


【解决方案1】:

UIWebview 有一个协议,UIWebViewDelegate,它可以帮助你观察你的变化 它使用您可以观察到的 UIWebview 加载生命周期中的变化实现了一些方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSLog(@"shouldStart");
    return true;
}

- (void)webViewDidStartLoad:(UIWebView *)webView {
    NSLog(@"webViewDidStartLoad");
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"webViewDidFinishLoad");
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    NSLog(@"%@", error);
    NSLog(@"didFailLoadWithError");
}

为了接收此函数的回调,例如在.h 的类接口上注册委托。

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIWebViewDelegate>

@end

我已经建立了一个示例项目,在打开 URL 时,我在didFailLoadWithError 回调中收到以下错误:

错误域=WebKitErrorDomain Code=101 "(null)"

您的请求似乎没有正确编码。您应该按以下方式对字符串进行编码:

NSString *encodedString=[[NSString stringWithFormat:@"https://app.bridallive.com/#/dashboard?iPadA‌​pp=true"] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
    NSURL *weburl = [NSURL URLWithString:encodedString];

【讨论】:

  • 这就是我所做的。正如我所提到的,该应用程序以前可以正常工作。我怀疑这可能是 iOS 10.x 或 XCode 8 的问题。像 google.com 这样的其他 URL 运行良好
  • 谢谢,但这也不起作用。这让事情变得更糟——就像你的屏幕截图一样,永远不会加载屏幕。最后,我在 iPad 中发现了切换语言的错误——看起来网站 JavaScript 中存在错误。我发现了在 Mac OS Safari 中启用开发者控制台并连接到 iPad 的 Safari 的问题。无论如何,非常感谢。
猜你喜欢
  • 2017-09-28
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
相关资源
最近更新 更多