嗨!
我正在構建一個Chrome擴展,我需要在後臺頁面中嵌入一個SWF對象。
一切正常,除了SWFobject和eventListeners的JavaScript控件。
我的猜測是它與跨域策略有關,因爲在web服務器上測試頁面時一切正常。Chrome擴展中的SWF對象 - API Unavaiable
總之,這裏的一個片段:
在主要頁面:
var playerView = chrome.extension.getBackgroundPage();
$('#playerPause').click(function(){
playerView.playerPause();
});
在後臺:
function playerPause() {
if (postData[nowPlaying].provider == 'youtube') {
player.pauseVideo();
}
else if (postData[nowPlaying].provider == 'soundcloud') {
player.api_pause();
};
}
而且事件監聽器:
soundcloud.addEventListener('onMediaEnd', playerNext);
function onYouTubePlayerReady(player) {
player.addEventListener("onStateChange", "function(state){ if(state == 0) { playerNext(); } }");
}
在控制檯它拋出
"Uncaught TypeError: Object # has no method 'pauseVideo'"
兩個Youtube的嵌入的SoundCloud之一。
此外,SwfObject的嵌入像這樣(和作品):
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'
}
);
}
}
對不起,冗長的帖子,我想提供儘可能多的信息成爲可能。
另外,我知道的代碼是不漂亮,這只是我的第二個應用程序;)
非常感謝事先向任何人誰可以幫助,
賈科莫
沒有答案給你,但建議:你的YouTube SWFObject代碼在兩個不同的地方聲明FlashVars;我建議你簡化爲單一的方法。 ?enablejsapi = 1&playerapiid = player可以作爲{autoplay:1,enablejsapi:1,playerapiid:「player」}插入到FlashVars對象中。或者,您可以將'autoplay'移動到查詢字符串中:?enablejsapi = 1&playerapiid = player&autoplay = 1 – pipwerks
@pipwerks感謝您的建議,我不知道我是如何將它忘記的! – Giakki
我對如何定義「玩家」感到困惑。有時它是一個全球性的(在「playerPause」中),有時它是一個本地的(在「onYouTubePlayerReady」中)也許有一個提示。 – mjhm