2016-09-20 6 views
2

タイトルとして既にiOSの埋め込みYouTube iframe-playerにいくつか問題があります。しかし、まず私の問題の背景について少し。私は、デバイスに格納され、WKWebViewの内部にロードされた一連のHTMLファイルを持っています。ファイルには単純なテキストだけが含まれ、iframe-syntaxを使用して埋め込まれたyoutube-videoも含まれます。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ターゲットでリンクを開くときにWebViewの動作を説明したコメントを見つけました。 WebViewは新しいウィンドウを開くことができません(ブランクが強制するものです)ので、新しいウィンドウリンクを開くように新しいWKWebViewインスタンスを要求するためにUIDelegateを呼び出します(https://developer.apple.com/reference/webkit/wkuidelegate/1536907-webviewも参照)。私が今やった

navigationActions先はTargetFrameがnil(それが新しいウィンドウを指していることを意味する)、代わりにSafariでリンクを開くかどうかをチェック、デリゲートを実装することでした。残念なことに、この種のリンク処理は常にプレーヤーを壊すので、プレーヤーを初期状態に戻すために、埋め込みWebコンテンツのリロードをトリガーする必要があります。これは、アプリケーションに戻るときに再生を再開することに関して少し不幸ですが、ビデオをまったく再生することができない場合よりも優れています。

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 
} 
関連する問題