iOS 9 上的 UIWebView 中没有 运行 Vimeo

Vimeo not running in UIWebView on iOS 9

我在显示 Vimeo 视频的 UIScrollView 中嵌入了一个 UIWebView:

vimeoView = [[UIWebView alloc] init];    
NSMutableString *html = [[NSMutableString alloc] initWithCapacity:1] ;
                        [html appendString:@"<html><head>"];
                        [html appendString:@"<style type=\"text/css\">"];
                        [html appendString:@"body {"];
                        [html appendString:@"background-color: transparent;"];
                        [html appendString:@"color: white;"];
                        [html appendString:@"}"];
                        [html appendString:@"</style>"];
                        [html appendString:@"</head><body style=\"margin:0\">"];
                        [html appendString:@"<iframe src=\"https://player.vimeo.com/video/%@?title=0&byline=0&portrait=0&badge=0&loop=1\" width=\"%0.0f\" height=\"%0.0f\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>"];
                        [html appendString:@"</body></html>"];

                        NSString *htmlString = [NSString stringWithFormat:html, videoID, vimeoView.frame.size.width, vimeoView.frame.size.height];

                        [vimeoView loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"https://vimeo.com"]];

此代码使用 Xcode 7 编译并通过 App Store 分发(当然是测试版)。该应用程序在 iOS 8 上运行良好,但在 iOS 9 上它在启动全屏后挂在 0 秒。

有人在 iOS 9 上使用它吗?我想避免使用 HTTPS 开关的异常(或者至少对指定的服务器使用一个狭窄的异常)。 FWIW,NSAllowsArbitraryLoads = YES 无论如何都不能解决这个问题。

这是我从 Vimeo 支持收到的回复:

We’re in the process of migrating between CDNs so I’m curious if that has anything to do with what you’re seeing.

For example, can you try this video: https://vimeo.com/76979871, which is located on our older CDN;

and this video: https://vimeo.com/139107494, located on our newer CDN.

对我来说,这是因为较新的 CDN 上的视频在我的应用程序中运行良好,而较旧的 CDN 上的视频则没有。但是,我还没有收到关于 whether/when 旧 CDN 视频将迁移到新 CDN 的回复。

----- 来自 Vimeo 支持的更新 9/22:

iOS9 中的 Webview 不会通过安全连接 (HTTPS) 加载不安全的内容 (HTTP)。在播放托管在我们旧 CDN 上的旧视频时,一些内容仍然通过 HTTP 提供。最近上传的视频的所有资源都通过 HTTPS 提供,并且可以在 iOS 9 个网络视图中正常播放。

您的应用是只播放来自您的 Vimeo 帐户的视频,还是也显示其他人的视频?如果您只在应用中使用自己的视频,我建议您重新上传这些视频;他们应该会自动转到我们较新的 CDN,其中所有资产都通过 HTTPS 提供。

我们正在将视频从较旧的 CDN 转移到较新的 CDN,但尚无 public 时间框架来确定这需要多长时间。

您可以尝试类似的方法:

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    NSURLRequest* request = [webView request];
    NSString *host = [request.URL host];

    if ([host isEqualToString:@"player.vimeo.com"]){
        NSString *js = @"document.querySelector('.play').click();";
        [self.webView stringByEvaluatingJavaScriptFromString:js];
    }
}