2013-01-13 20 views
8

Tôi có một trang có khung nội tuyến tải video trên youtube (src của iframe được sửa đổi trong thời gian chạy). tôi dựa trên mã bởi Rob W cung cấp câu trả lời khác nhau về chủ đề nàyYoutube Iframe: onYouTubePlayerAPIReady() không được gọi là

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

Sau đó, khi iframe được nạp mã này được thực hiện:

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

hàm được gọi dispose_ytplayer() là:

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 
      } 
     }); 
    } 
} 

nhưng cảnh báo thứ hai ("gọi trênYouTubePlayerAPIReady") không bao giờ được gọi và chrome console.log của tôi hiển thị thông báo lỗi này từ www-embed_core_module-vflNmuGQq.js: 26:

Cố gắng JavaScript không an toàn để truy cập khung bằng URL http://mysite.com từ khung có URL http://www.youtube.com/embed/nOEw9iiopwI?enablejsapi=1. Tên miền, giao thức và cổng phải phù hợp.

Bất kỳ ý tưởng nào?

Trả lời

20

onYouTubePlayerAPIReady phải ở đối tượng window.

thử:

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

nó hoạt động, tuyệt vời! Cảm ơn! – jenjis

+0

bạn đã cứu ngày của tôi .... cảm ơn người đàn ông! –

+0

Bạn là người bảo vệ cuộc sống, cảm ơn bạn! –

0

Nó có vẻ như bạn không đóng chức năng tắt một cách chính xác.

Cuối cùng } đang đóng cửa onYouTubePlayerAPIReady(), chứ không phải dispose_ytplayer().

Cố định mã:

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 
      } 
     }); 
    } 
} 
+0

cảm ơn bạn đã phản hồi nhanh, nhưng mã ban đầu là chính xác, tôi đã phạm sai lầm khi cắt/sao chép, xin lỗi :) – jenjis