2017-04-07 7 views
0

:WKWebView didFinishNavigationイベントが発生した後、 https://www.youtube.com/embed/amtuB-2wGeQ?playsinline=1&autoplay=1WKWebView evaluateJavaScriptはユーチューブのために働いていない埋め込まれた動画のURL

はその後、私が呼ん:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 

webView.evaluateJavaScript("document.querySelector('video').play()", completionHandler: { (result, error) in 
    if let r = result { 
     print(r) 
    } 
    if let e = error { 
     print(e) 
    } 
    }) 
} 

しかし、 javascriptコマンドは実行されていません。エラーと結果の両方がnilです。

Chromeデベロッパーツールで同じjavascriptコマンドを実行すると、「play()」と「pause()」を呼び出してビデオを正常に再生し、動画を一時停止しました。

document.querySelector('video').play() 
document.querySelector('video').pause() 

私はWKWebView内部で何が起こったのか分かりません。 ありがとう!

答えて

1

OKを使用し、最終的に考え出しました。 >高度な、有効「ショーの開発 -

1. Safariを開き、好み:

あなたも「なぜ私のJavascriptをWKWebViewに動作していない」と苦労している場合は、以下の理由を把握するためにきちんとした方法でありますメニューバーの」Safariのメニューで

2、開発中のメニュー - >シミュレータ、

3.今、あなたはコンソールで、SafariでWebページのHTMLとスクリプトを見ることができますあなたのiPhoneシミュレータ接続入力領域、どちらが動作するかを確認するには、別のjavascriptを実行してみてください。

4.次に「evaluateJavaScript」

から動作するものを呼び出し、それは私のケースから動作しませんでした理由は、埋め込まれたWebページは一般的なWebブラウザとWKWebViewの間で異なって描画されたことです。私は動作しなかった例としてブラウザのスクリプトを取った。

Safariデバッガの助けを借りて、本当にクールなWKWebView内で実際に何が起こっているのかを見ることができます。

同じ問題が発生した場合に役立ちます。 ありがとう!

0

WKWebViewの代わりにUIWebViewを使用し、このコードをYouTube動画を再生するために使用します。それが機能しない理由

#pragma mark - Embed Video 

- (UIWebView *)embedVideoYoutubeWithURL:(NSString *)urlString andFrame:(CGRect)frame { 
    NSString *videoID = [self extractYoutubeVideoID:urlString]; 

    NSString *embedHTML = @"\ 
    <html><head>\ 
    <style type=\"text/css\">\ 
    body {\ 
    background-color: transparent;\ 
    color: white;\ 
    }\ 
    </style>\ 
    </head><body style=\"margin:0\">\ 
    <embed id=\"yt\" src=\"http://www.youtube.com/v/%@\" type=\"application/x-shockwave-flash\" \ 
    width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
    </body></html>"; 
    NSString *html = [NSString stringWithFormat:embedHTML, videoID, frame.size.width, frame.size.height]; 
    UIWebView *videoWebView = [[UIWebView alloc] initWithFrame:frame]; 
    [videoWebView loadHTMLString:html baseURL:nil]; 

    return videoWebView; 
} 

/** 
@see https://devforums.apple.com/message/705665#705665 
extractYoutubeVideoID: works for the following URL formats: 

www.youtube.com/v/VIDEOID 
www.youtube.com?v=VIDEOID 
www.youtube.com/watch?v=WHsHKzYOV2E&feature=youtu.be 
www.youtube.com/watch?v=WHsHKzYOV2E 
youtu.be/KFPtWedl7wg_U923 
www.youtube.com/watch?feature=player_detailpage&v=WHsHKzYOV2E#t=31s 
youtube.googleapis.com/v/WHsHKzYOV2E 
*/ 

- (NSString *)extractYoutubeVideoID:(NSString *)urlYoutube { 
    NSString *regexString = @"(?<=v(=|/))([-a-zA-Z0-9_]+)|(?<=youtu.be/)([-a-zA-Z0-9_]+)"; 
    NSError *error = NULL; 
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexString options:NSRegularExpressionCaseInsensitive error:&error]; 
    NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:urlYoutube options:0 range:NSMakeRange(0, [urlYoutube length])]; 

    if(!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) { 
     NSString *substringForFirstMatch = [urlYoutube substringWithRange:rangeOfFirstMatch]; 

     return substringForFirstMatch; 
    } 

    return nil; 
} 

は、またはGoogleのユーチューブ-IOS-プレーヤーヘルパーポッド

+0

できません...私のプロジェクトはwkwebviewだけを使用するように修正されました... – RainCast

関連する問題