Chrome 扩展程序中的 SWF 对象 - API 不可用
Posted
技术标签:
【中文标题】Chrome 扩展程序中的 SWF 对象 - API 不可用【英文标题】:SWFobject in a Chrome Extension - API Unavaiable 【发布时间】: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 扩展程序中。谁能确认一下? 【参考方案1】:你可以看看this extension,你不能在 chrome 扩展中访问本地连接,但你可以运行一个内容脚本作为代理脚本。(你可以在 gae 或任何其他免费服务器上提供代理页面)
【讨论】:
【参考方案2】:这里的问题是,自从清单发展到 v2 后,您就不能在 chrome 扩展中使用内联脚本或内联事件处理程序。
您应该为我添加清单文件以更好地了解发生了什么。但简而言之,你所能做的就是
在主页面,
删除所有内联脚本并将它们移动到外部 JS 文件中。 删除内联事件侦听器,将它们移动到相同或另一个外部 JS 并使用但问题是,您不能在后台页面中执行对 swf 的调用或期望它返回任何内容。所有这些都会继续给你addEventListener().
"Uncaught TypeError"
Exception。
以网络摄像头图像捕获 swf 为例,网络摄像头将被流式传输到页面,但永远无法对其进行函数调用,因此永远不会捕获图像。 由于这个原因,我从插件弹出窗口中扫描二维码的项目遇到了废墟。
【讨论】:
以上是关于Chrome 扩展程序中的 SWF 对象 - API 不可用的主要内容,如果未能解决你的问题,请参考以下文章
无法从Chrome中的http源(wildfly服务器)加载swf文件?