2017-04-07 117 views
0

我已經加載一個嵌入的YouTube視頻到WKWebView: https://www.youtube.com/embed/amtuB-2wGeQ?playsinline=1&autoplay=1WKWebView evaluateJavaScript不工作嵌入的YouTube視頻網址

然後WKWebView didFinishNavigation事件被觸發後,我打電話:

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命令沒有被執行,錯誤和結果都是零。

當我在Chrome開發者工具中執行相同的javascript命令時,它通過調用「play()」和「pause()」成功播放視頻並暫停視頻。

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

我不知道里面WKWebView發生了什麼事,什麼想法? 謝謝!

回答

1

OK,終於想通了,爲什麼它不工作。

如果你也與「爲什麼我的JavaScript未在WKWebView工作」的掙扎,下面是要弄清楚爲什麼一個巧妙的方法:

1.打開Safari瀏覽器,設置 - >高級,啓用「顯示開發商在菜單欄的」

2.在Safari瀏覽器菜單,制定菜單 - >模擬器,連接你的iPhone模擬器

3.現在你可以看到在Safari網頁HTML和腳本,在控制檯輸入區域,嘗試運行不同的JavaScript來查看哪一個工作。

4.然後調用從「evaluateJavaScript」

原因工作的一個,它爲什麼沒有從我的情況下工作,是該嵌入式網頁是常見的web瀏覽器和WKWebView之間呈現不同。我以瀏覽器腳本作爲例子,它不起作用。

在Safari調試器的幫助下,您可以看到WKWebView內部的真實情況,這非常酷。

希望它有助於您遇到同樣的問題。 謝謝!

0

使用UIWebView代替WKWebView並使用此代碼播放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; 
} 

或使用谷歌的YouTube-IOS玩家輔助莢

+0

我不能...我的項目已修復只使用wkwebview ...謝謝雖然 – RainCast