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];
}
}
我在显示 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];
}
}