WKWebview: при нажатии кнопки в приложении воспроизводите встроенное видео с YouTube. - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть кнопка воспроизведения, наложенная на UIImageView (headerView) в моем приложении. После того, как пользователь нажмет эту кнопку, я хочу отобразить встроенное YoutubeVideo непосредственно в рамке этого UIImageView. Однако, во-первых, мое видео на YouTube не воспроизводится автоматически, а во-вторых, размер слишком мал. Что я делаю неправильно? Я гуглил все возможные ответы и перепробовал все. Или это проблема, связанная с симулятором? Вот мой код, который срабатывает при нажатии кнопки воспроизведения:

NSString *videoIdentifier = @"EXaEz0mJXWY";

WKWebView *webView = [[WKWebView alloc] initWithFrame:self.headerView.bounds];
[webView.configuration setAllowsInlineMediaPlayback:YES];
[webView.configuration setMediaTypesRequiringUserActionForPlayback:WKAudiovisualMediaTypeNone];
[self.headerView addSubview:webView];

NSString* embedHTML = [NSString stringWithFormat:@"\
                       <html>\
                            <body style='margin:0px;padding:0px;'>\
                                <script type='text/javascript' src='http://www.youtube.com/iframe_api'></script>\
                                <script type='text/javascript'>\
                                    function onYouTubeIframeAPIReady() \
                                    {\
                                        ytplayer=new YT.Player('playerId',{events:{onReady:onPlayerReady}})\
                                    }\
                                    function onPlayerReady(a)\
                                    { \
                                        a.target.playVideo(); \
                                    }\
                                </script>\
                       <iframe id='playerId' type='text/html' width='%0.0f' height='%0.0f' src='http://www.youtube.com/embed/%@?enablejsapi=1&rel=0&playsinline=1&autoplay=1' frameborder='0'>\
                            </body>\
                       </html>", webView.frame.size.width, webView.frame.size.height, videoIdentifier];

//NSLog(@"Embeddedhtml: %@", embedHTML);
[webView loadHTMLString:embedHTML baseURL:[[NSBundle mainBundle] resourceURL]];

1 Ответ

1 голос
/ 22 апреля 2020

мое Youtube видео не воспроизводится автоматически

Вы должны инициализировать WKWebView с параметром configuration. Изменение конфигурации после этого не имеет никакого эффекта.

WKWebViewConfiguration* config = [[WKWebViewConfiguration alloc] init];
[config setAllowsInlineMediaPlayback:YES];
[config setMediaTypesRequiringUserActionForPlayback:WKAudiovisualMediaTypeNone];
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.headerView.bounds configuration:config];

размер слишком мал

WKWebView использует фактические пиксели устройства для измерения и некоторые эвристические параметры по умолчанию масштабирование, тогда как UIKit возвращает ширину и высоту в точках. Простым решением было бы добавить metaport области просмотра на страницу:

<head>
<meta name='viewport' content='width=device-width, initial-scale=1'>
</head>
...