我正在尝试研究如何在我的IOS应用程序中显示网页。我试着仔细查看我能找到的信息。这是我正在使用的:
@implementation FirstViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.productURL = @"http://google.com/";
NSURL *url = [NSURL URLWithString:self.productURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
_webView = [[WKWebView alloc] initWithFrame:self.view.frame];
[_webView loadRequest:request];
_webView.frame = CGRectMake(self.view.frame.origin.x+50,self.view.frame.origin.y+50, self.view.frame.size.width-100, self.view.frame.size.height-200);
printf("\nReady to add the Subview");
self.view.backgroundColor = [UIColor blueColor];
[self.view addSubview:_webView];
printf("\nSubView has been added");
}
@end
框架在上面偏移,所以我可以给它上色并看到子视图会定位在那里。根据我的理解,网页应该出现在子视图中,但我只是得到一个空白页面。
我还在我的Info.plist中添加了NSExceptionDomains字典,并添加了google.com,其中包含一个字典,其中NSIncludesSubdomains设置为true,NSExceptionAllowsInsecureHTTPLoads设置为true,这可能是问题,但无济于事。我尝试了几个网址和同样的事情。
我怎样才能找出正在发生的事情并修复它?
我发现了问题!显然我需要将关键的“应用传输安全设置”作为字典添加到我的Info.plist中,并将“允许任意加载”键添加为true。它现在显示!
我以前找不到这个,但是当我这样做并添加它时,它与上面的代码一起正常工作。
我知道你找到了解决方案。但在这里,我想解释代码有什么问题。代码实际上很好。问题是你正试图打开一个不安全的网址http://google.com/。任何以http://开头的网址都会被iOS阻止。只允许以https://开头的URL,而不允许任何“应用传输安全设置”。
在您的情况下,您实际上有2个选项:
- 添加App传输安全设置。
- 确保您只调用https:// URL。您可以更改https://google.com,它应该可以工作,而无需添加任何应用程序传输安全设置。
至于您添加“允许任意加载”的选项可以进行测试,但您真正需要做的是在App Transport安全设置中添加例外域。这样你的应用程序只接受相关的URL,而不是任何可能被恶意URL注入打开的旧URL。