【发布时间】:2011-11-08 14:52:04
【问题描述】:
嗨!
我正在构建一个 Chrome 扩展程序,我需要在后台页面中嵌入一个 SWF 对象。
除了 SWFobject 和 eventListener 的 JavaScript 控件之外,一切都正常。
我的猜测是它与跨域策略有关,因为在网络服务器上测试页面时一切正常。
无论如何,这是一个sn-p:
在主页中:
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();
};
}
还有 eventListeners:
soundcloud.addEventListener('onMediaEnd', playerNext);
function onYouTubePlayerReady(player) {
player.addEventListener("onStateChange", "function(state){ if(state == 0) { playerNext(); } }");
}
在控制台中抛出
"Uncaught TypeError: Object # has no method '暂停视频'"
对于 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 对象中。或者,您可以将“自动播放”移动到查询字符串中:?enablejsapi=1&playerapiid=player&autoplay=1
-
@pipwerks 感谢您的建议,我不知道我是怎么忘记的!
-
我对如何定义“玩家”感到困惑。有时它是全局的(在“playerPause”中),有时是本地的(在“onYouTubePlayerReady”中),也许那里有提示。
-
@mjhm 你是对的,这有点令人困惑,所以我在他们的教程中将值更改为默认值(我很绝望),但它仍然无法正常工作。 onYouTubePlayerReady 函数永远不会被触发,即使我从控制台触发它,我也会发现这些方法是未定义的......
-
我担心的是:(来自文档)注意:要测试这些调用中的任何一个,您必须让文件在网络服务器上运行,因为 Flash 播放器会限制本地文件和互联网。 这意味着 Youtube 播放器不能嵌入到 Chrome 扩展程序中。谁能确认一下?
标签: google-chrome youtube google-chrome-extension swfobject soundcloud