10

YouTubeビデオをロードするiframeを含むページがあります(iframeのsrcは実行時に変更されます)。このトピックに関するさまざまな回答で提供されたRob Wによるコードに基づいています

<iframe id="browser" class="browser" scrolling="no" name="navigation"  
src="http://www.youtube.com/embed/nOEw9iiopwI?enablejsapi=1" application="youtube" style="display:  
inline;"></iframe>

次に、iframe が読み込まれると、次のコードが実行されます。

$('.browser').load(function() {
dispose_ytplayer();
});

呼び出された関数 dispose_ytplayer() は次のとおりです。

function dispose_ytplayer() {
    (function(){
    var s = document.createElement("script");
    s.src = "http://www.youtube.com/player_api";
    var before = document.getElementsByTagName("script")[0];
    before.parentNode.insertBefore(s, before);
     })();

    alert('called yt_dispose');

    var ytIframeplayer;

    function onYouTubePlayerAPIReady() {
        alert('called onYouTubePlayerAPIReady');
        ytIframeplayer = new YT.Player('browser', {
             events: {
                "onStateChange": stopCycle
             }
        });
    }
}

しかし、2 番目のアラート (「called onYouTubePlayerAPIReady」) が呼び出されることはなく、Chrome console.log にはwww-embed_core_module-vflNmuGQq.js:26からの次のエラー メッセージが表示されます。

安全でない JavaScriptが、URL http://www.youtube.com/embed/nOEw9iiopwI?enablejsapi=1のフレームから URL http://mysite.comのフレームにアクセスしようとしています。ドメイン、プロトコル、およびポートが一致する必要があります。

何か案は?

4

2 に答える 2

26

onYouTubePlayerAPIReadyオブジェクト上にある必要がありwindowます。

試す:

window.onYouTubePlayerAPIReady = function() {
        alert('called onYouTubePlayerAPIReady');
        ytIframeplayer = new YT.Player('browser', {
             events: {
                "onStateChange": stopCycle
             }
    });
}
于 2013-01-13T13:15:39.587 に答える
1

機能を正しく閉じていないようです。

最後}は締め切りonYouTubePlayerAPIReady()ですdispose_ytplayer()

固定コード:

function dispose_ytplayer() {
    (function(){
        var s = document.createElement("script");
        s.src = "http://www.youtube.com/player_api";
        var before = document.getElementsByTagName("script")[0];
        before.parentNode.insertBefore(s, before);
    })();

    alert('called yt_dispose');

    var ytIframeplayer;

    function onYouTubePlayerAPIReady() {
        alert('called onYouTubePlayerAPIReady');
        ytIframeplayer = new YT.Player('browser', {
            events: {
                "onStateChange": stopCycle
            }
        });
    }
}
于 2013-01-13T13:19:43.237 に答える