0

YouTube ビデオを PhoneJS シングルページ モバイル アプリケーションに埋め込む際に、この問題が発生します。PhoneJS では、JS スクリプトは別のファイルで定義されます。そこで、HTML div を次のように定義しました。

<div id="player"></div>

今JSファイルで、私はこれをしました:

function getVideo() {        
    var tag = document.createElement('script');
    tag.src = "https://www.youtube.com/iframe_api";
    var playerDiv = document.getElementById('player');
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    var player;
    function onYouTubeIframeAPIReady() {
        player = new YT.Player(playerDiv, {
            height: '250',
            width: '444',
            videoId: sIFYPQjYhv8               
        });
    }        
}

デバッガーを実行して表示すると、Youtube に呼び出しが行われ、応答が受信されますが、ビューに表示されません。

KnockoutJS バインディングを使用しているので、html ビューの div を次のように変更しました。

<iframe id="player" type="text/html" width="444" height="250" frameborder="0" data-bind="attr: { src: src }"></iframe>

そして、次のように src ビデオ ID を渡します。

src: ko.observable('http://www.youtube.com/embed/' + sIFYPQjYhv8 + '?autoplay=1')

ただし、この場合、デバッガーでは、Youtube への呼び出しすら行われません。何も起こりません。実際、私は 2 番目の方法ではなく API 呼び出しを使用することを好みます。

最初のアプローチを機能させる方法について何か提案はありますか? API呼び出しを使用するということですか?

EDITビューに以下のコードを追加すると、ビデオが正常にストリーミングされることに言及したいだけです。

<h1>Video</h1>
        <div id="player"></div>
        <script>
            var tag = document.createElement('script');
            tag.src = "https://www.youtube.com/iframe_api";
            var playerDiv = document.getElementById('player');
            var firstScriptTag = document.getElementsByTagName('script')[0];
            firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

            var player;
            function onYouTubeIframeAPIReady() {
                player = new YT.Player(playerDiv, {
                    height: '250',
                    width: '444',
                    videoId: 'sIFYPQjYhv8'
                });
            }
        </script>
4

1 に答える 1