7

你好!
我正在构建一个 Chrome 扩展,我需要在后台页面中嵌入一个 SWF 对象。
除了 SWFobject 和 eventListener 的 JavaScript 控件之外,一切都正常。
我的猜测是它与跨域策略有关,因为在网络服务器上测试页面时一切正常。

无论如何,这是一个片段:

在主页中:

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

在控制台中它抛出

“未捕获的 TypeError:对象 # 没有方法 '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'
            }
        );
    }
}

抱歉,这篇文章很长,我想提供尽可能多的信息。
另外,我知道代码不漂亮,这只是我的第二个应用程序;)

非常感谢任何可以提供帮助的人,
贾科莫

4

2 回答 2

0

这里的问题是,自从清单发展到 v2 以来,您不能在 chrome 扩展中使用内联脚本或内联事件处理程序。

您应该为我添加清单文件以更好地了解发生了什么。但简而言之,你所能做的就是

在主页面中,

  • 删除所有内联脚本并将它们移动到外部 JS 文件。
  • 删除内联事件侦听器,将它们移动到相同或另一个外部 JS 并使用

    添加事件监听器()。

但问题是,您不能在后台页面中执行对 swf 的调用或期望它返回任何内容。所有这些都会继续给你"Uncaught TypeError"例外。

以网络摄像头图像捕获 swf 为例,网络摄像头将被流式传输到页面,但永远无法对其进行函数调用,因此永远不会捕获图像。我的从插件弹出窗口扫描二维码的项目因此遇到了废墟。

于 2013-08-03T12:14:10.513 回答
0

你可以看看这个扩展,你不能在 chrome 扩展中访问本地连接,但你可以将内容脚本作为代理脚本运行。(你可以在 gae 或任何其他免费服务器上提供代理页面)

于 2012-06-19T00:27:00.420 回答