2016-09-20 94 views
2

作爲標題已經聲明我面臨iOS上的嵌入式youtube iframe播放器的一些問題。但首先一點關於我的問題的背景。我有一組存儲在設備上並加載到WKWebView中的HTML文件。這些文件僅包含簡單文本,有時還包含使用iframe語法嵌入的YouTube視頻。在iOS中使用嵌入式YouTube的iframe的共享功能

<iframe width="100%" height="100%" id="playerId" type="text/html" src="https://www.youtube.com/embed/XXXXXXXX?enablejsapi=0&rel=0&playsinline=0&autoplay=0" frameborder="0"> 

播放,聲音,全屏輸入....一切正常。 youtube-player的信息部分(右上角的箭頭)除外。當我按下箭頭時,屏幕打開,但選擇url或其中一個共享選項不起作用,只能打破嵌入的視頻。我仍然可以關閉信息部分,但縮略圖消失了,直到我重新加載HTML文檔後纔會播放。

現在我的猜測是WKWebView沙盒中有安全設置,可以阻止我加載任何嵌入式鏈接。我想我記得有關WebView的一些信息,不允許在iframe中與_blank目標鏈接,但我不確定。無論如何不能改變這些。

感謝您的任何提示,

維克多

回答

1

OK,

我自己解決自己的問題(至少部分)。我查看了WKWebView及其委託的頭文件,並發現了一個評論,該文章提到了使用_blank目標打開鏈接時的WebViews行爲。由於WebView無法打開新窗口(這是空白執行的內容),因此它將調用其UIDelegate以請求新的WKWebView實例打開「新窗口」鏈接(另請參閱https://developer.apple.com/reference/webkit/wkuidelegate/1536907-webview)。

我現在所做的就是實現委託,檢查navigationActions targetFrame是否爲零(意味着它指向一個新窗口),然後在Safari中打開鏈接。不幸的是,這種鏈接處理總是打斷玩家,所以我還必須重新載入我的嵌入式網頁內容,以便將玩家「重置」回到其初始狀態。這對於在返回應用程序時恢復播放有點不幸,但它根本不能播放視頻。

func webView(webView: WKWebView, createWebViewWithConfiguration configuration: WKWebViewConfiguration, forNavigationAction navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? { 

    if navigationAction.targetFrame == nil { 

     guard let requestURL = navigationAction.request.URL 
      else { return nil } 

     UIApplication.sharedApplication().openURL(requestURL) 
     webView.reload() 
    } 

    return nil 
}