【问题标题】:Can't get WebKit to display web page无法让 WebKit 显示网页
【发布时间】:2019-03-26 15:46:15
【问题描述】:

我正在尝试研究如何在我的 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

框架在上面是偏移的,所以我可以给它上色并看到子视图将被定位在那里。据我了解,该网页应该出现在子视图中,但我只是得到一个空白页面。

我还将 NSExceptionDomains 字典添加到我的 Info.plist 并添加了 google.com,其中包含一个字典,其中 NSIncludesSubdomains 设置为 true,NSExceptionAllowsInsecureHTTPLoads 设置为 true,认为这可能是问题所在,但无济于事。我已经尝试了几个网址和相同的东西。

我怎样才能找出正在发生的事情并解决它?

【问题讨论】:

  • 可能不是问题,但我会在加载请求之前将视图添加到其超级视图中。如果 Web 视图没有安装在任何视图中,则没有理由加载请求。

标签: ios objective-c webkit mobile-webkit


【解决方案1】:

我发现了问题!显然,我需要将键“App Transport Security Settings”作为字典添加到我的 Info.plist 中,并将键“Allow Arbitrary Loads”添加为 true。它现在显示!

我以前找不到这个,但是当我找到并添加它时,它与上面的代码一样工作正常。

【讨论】:

    【解决方案2】:

    我知道您已经找到了解决方案。但在这里我想解释一下代码有什么问题。代码实际上很好。问题是您试图打开不安全的 URL http://google.com/。任何以 http:// 开头的 URL 都会被 iOS 阻止。仅允许以 https:// 开头的 URL,而无需任何“应用程序传输安全设置”。

    在您的情况下,您实际上有 2 个选项:

    1. 添加应用传输安全设置。
    2. 确保只调用 https:// URL。您可以更改https://google.com,它应该可以在不添加任何应用程序传输的情况下工作 安全设置。

    至于您添加“允许任意负载”的选项可以进行测试,但您真正需要做的是在您的应用程序传输安全设置中添加异常域。这样,您的应用仅接受相关 URL,而不接受任何可能被恶意 URL 注入打开的旧 URL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      相关资源
      最近更新 更多