Xin chào!
Tôi đang tạo tiện ích mở rộng của Chrome, trong đó tôi cần nhúng SWFobject vào trang nền.
Mọi thứ đều hoạt động, ngoại trừ các điều khiển JavaScript cho SWFobject và eventListeners.
Tôi đoán là nó có liên quan đến chính sách đa miền, bởi vì trong khi kiểm tra trang trên máy chủ web, mọi thứ đều hoạt động tốt.SWFobject trong Tiện ích mở rộng của Chrome - API Unavaiable
Dù sao, đây là một đoạn trích:
Trong trang chính:
var playerView = chrome.extension.getBackgroundPage();
$('#playerPause').click(function(){
playerView.playerPause();
});
Trong nền:
function playerPause() {
if (postData[nowPlaying].provider == 'youtube') {
player.pauseVideo();
}
else if (postData[nowPlaying].provider == 'soundcloud') {
player.api_pause();
};
}
Và eventListeners:
soundcloud.addEventListener('onMediaEnd', playerNext);
function onYouTubePlayerReady(player) {
player.addEventListener("onStateChange", "function(state){ if(state == 0) { playerNext(); } }");
}
Trong giao diện điều khiển nó ném
"Uncaught TypeError: Object # has no method 'pauseVideo'"
cho cả Youtube nhúng một Soundcloud.
Ngoài ra, SWFObject được nhúng vào như thế này (và các công trình):
function loadTrack (id) {
if(postData[id].provider == 'youtube') {
swfobject.embedSWF(
"http://www.youtube.com/e/" + postData[id].url + "?enablejsapi=1&playerapiid=player",
"player",
"1",
"1",
"8",
null,
{
autoplay: 1
},
{
allowScriptAccess: "always"
},
{
id: "player"
}
);
}
else if(postData[id].provider == 'soundcloud') {
swfobject.embedSWF(
'http://player.soundcloud.com/player.swf',
'player',
'1',
'1',
'9.0.0',
'expressInstall.swf',
{
enable_api: true,
object_id: 'player',
url: postData[id].url,
auto_play: true
},
{
allowscriptaccess: 'always'
},
{
id: 'player',
name: 'player'
}
);
}
}
Xin lỗi vì bài viết dài, tôi muốn cung cấp càng nhiều thông tin càng tốt.
Ngoài ra, tôi biết mã là không đẹp, đây là chỉ ứng dụng thứ hai của tôi;)
Cảm ơn rất nhiều trước cho bất cứ ai có thể giúp đỡ,
Giacomo
Không có câu trả lời cho bạn, nhưng đề xuất: mã SWFObject YouTube của bạn khai báo FlashVars ở hai vị trí khác nhau; Tôi đề nghị bạn đơn giản hóa một phương pháp duy nhất. ? enablejsapi = 1 & playerapiid = trình phát có thể được chèn vào đối tượng FlashVars dưới dạng {autoplay: 1, enablejsapi: 1, playerapiid: "player"}. Ngoài ra, bạn có thể di chuyển 'autoplay' vào chuỗi truy vấn:? Enablejsapi = 1 & playerapiid = player & autoplay = 1 – pipwerks
@pipwerks Cảm ơn bạn đã đề xuất, tôi không biết làm thế nào tôi quên điều đó! – Giakki
Tôi đang bối rối về cách "người chơi" được xác định. Đôi khi nó là một toàn cầu (trong "playerPause") và đôi khi nó là một địa phương (trong "onYouTubePlayerReady") có thể có một gợi ý ở đó. – mjhm