我已经研究了这个问题的几个修复程序,但似乎没有解决问题。我如何强制播放所有<video>内容
我将在下面概述我已采取的步骤,以允许来自< video>标签元素的视频一致播放。我需要一个解决方案,可以跨不同的网站工作,而不是只适用于youtube等的东西。
参考我正在使用WKWebView作为Web内容的浏览器。我已经设置了allowInlineMediaPlayback = true(WKWebViewConfiguration)。我还实现了我在网页上调用的以下JavaScript代码片段,并成功修改了视频代码的属性以包含“playsinline”“autoplay”。无论网站开发者拥有什么,或者没有进入,我都能确定我需要的属性被添加到视频标签中。 (作为一个方面说明,我认为YouTube和其他人也难以让devleopers影响到他们的网站的行为(但更好的UX是,如果他们做到了))
反正到代码>>
WKWebViewConfiguration *dx = [[WKWebViewConfiguration alloc] init];
dx.allowsInlineMediaPlayback = TRUE;
WKWebView * webview = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, cell.wv.bounds.size.width, cell.wv.bounds.size.height) configuration:dx];
[cell addSubview:webview];
webview.navigationDelegate = self;
webview.UIDelegate = self;
webview.frame = CGRectMake(0, 0, cell.wv.bounds.size.width, cell.wv.bounds.size.height);
[[webview scrollView] setBounces:NO];
webview.scrollView.scrollEnabled = NO;
NSURL *nsurl=[NSURL URLWithString:urlws[indexPath.row]];
NSURLRequest *request = [NSURLRequest requestWithURL:nsurl cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval: 60.0];
[webview loadRequest:request];
NSString *jsCallBack = @"var b = document.querySelector(\"video\"); b.setAttribute(\"webkit-playsinline\",\"\"); b.setAttribute(\"autoplay\",\"\"); b.setAttribute(\"muted\",\"\");";
[webView evaluateJavaScript:jsCallBack completionHandler:^(NSString *result, NSError *error)
{
NSLog(@"Error %@",error);
NSLog(@"Result %@",result);
然后我通过调用这个js从IOS代码揭开序幕播放
NSString *jsCallBack = @"var element = document.querySelector('[aria-label=\"Play\"]'); element.click();";
[webView evaluateJavaScript:jsCallBack completionHandler:^(NSString *result, NSError *error)
{
结果:
播放功能被称为以及视频播放,但在U ser进入全屏播放,这不是应该发生的。 @IOS WebKit不错,但需要更多的工作,我们需要一些更智能的apis,因为现在很少有用户想要全屏观看视频。它的设计自然而然就是全屏显示,但它确实会带来糟糕的用户体验。
如果有人有任何想法,请让我知道。非常感谢
感谢您的建议,在我的研究中,我所看到的要么是''playsinline'而不是'webkit-playsinline'<<(我已经尝试过两种方式)。 我想在ios 10.0.2上运行这段代码。我将更新上面的代码,因为我正在完成“添加html属性”更新位代码的完成处理程序中播放视频。我的想法是,可能WKWebView已经决定在我有机会添加属性之前需要全屏播放视频。它确实取决于WKWebView对html的使用,并决定其行为应该是什么。 – user2712678
让我知道如果最后一点没有意义。我只是说WKWebView必须查看HTML和其中的视频标签,看看它是否需要播放视频。然后,我在页面完全加载时添加属性,届时它太晚了,WKWebView将要以全屏模式播放。我不知道如何在WKWebView做出这个决定之前在“playsinline autoplay”属性中添加页面
在HTML页面完全加载后,我添加了“playsinline”属性,没有问题,并且工作正常。你可以调试webview是Safari,并可以直接在视频标签中添加属性。让我知道在调试模式下编辑html后播放视频时会发生什么情况。 –