2017-01-14 27 views
1

我已经研究了这个问题的几个修复程序,但似乎没有解决问题。我如何强制播放所有<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,因为现在很少有用户想要全屏观看视频。它的设计自然而然就是全屏显示,但它确实会带来糟糕的用户体验。

如果有人有任何想法,请让我知道。非常感谢

回答

0

在哪个iOS版本中运行您的应用程序。至于iOS 10,您需要将属性更新为“playsinline”而不是“webkit-playsinline”。另外评估JavaScript api在wkwebview中是异步的。因此,您需要在第一个API的completionHandler中播放视频,以评估JavaScript。

+0

感谢您的建议,在我的研究中,我所看到的要么是''playsinline'而不是'webkit-playsinline'<<(我已经尝试过两种方式)。 我想在ios 10.0.2上运行这段代码。我将更新上面的代码,因为我正在完成“添加html属性”更新位代码的完成处理程序中播放视频。我的想法是,可能WKWebView已经决定在我有机会添加属性之前需要全屏播放视频。它确实取决于WKWebView对html的使用,并决定其行为应该是什么。 – user2712678

+0

让我知道如果最后一点没有意义。我只是说WKWebView必须查看HTML和其中的视频标签,看看它是否需要播放视频。然后,我在页面完全加载时添加属性,届时它太晚了,WKWebView将要以全屏模式播放。我不知道如何在WKWebView做出这个决定之前在“playsinline autoplay”属性中添加页面

+0

在HTML页面完全加载后,我添加了“playsinline”属性,没有问题,并且工作正常。你可以调试webview是Safari,并可以直接在视频标签中添加属性。让我知道在调试模式下编辑html后播放视频时会发生什么情况。 –

相关问题