Fancybox swfobject“无法加载请求的内容。请稍后再试。”

时间:2011-12-04 03:18:37

标签: jquery fancybox swfobject jwplayer

好的,我已经安装了FB 2.0.x,非常好。但是,我有一个页面,其中有4个视频使用JW播放器。目前,当您单击链接时,它会运行一个函数来打开fancybox实例。 fancybox是一组HTML代码。在html代码里面是一个带有id的div(每个div / video都是唯一的)。然后,它添加了flashvars,params和属性。功能如下:

function show_modelpopup(id,title,filepath,base_url) {
    var flashvars = { file: base_url+"uploads/videos/original/"+filepath, autostart:'true', skin: base_url+'js/skin.zip'};
var params = { allowfullscreen:'true', allowscriptaccess:'always', wmode: 'transparent'  };
var attributes = { id: id+'player', name: id+'player' };                             
swfobject.embedSWF(base_url+'mediaplayer/player.swf','container'+id, 480, 385, '9.0.115', 'false', flashvars, params, attributes, flashloaded);
}

当设置flashvars,params和属性时,它运行swfobject.embedSWF,最后一个选项是加载视频时运行的函数:

function flashloaded() {
    jQuery('#shadowbox_archives').fancybox({
        padding: 10,
        type: 'html',  
        height: 520,
        width: 600
    });
    jQuery.fancybox.open(jQuery('#shadowbox_archives'));
}

这一切都很有效。它加载窗口,你看到Flash播放器。但是,当您单击播放按钮时,它会显示“无法加载请求的内容。请稍后再试。”。我在Firefox上使用firebug来控制日志,我验证了flv文件路径是否正确。事实上,我将主页设置为显示相同的视频,但不在fancybox内。 swfobject js的输出如下:

Fancybox Popup:

    <object id="45player" width="480" height="385" type="application/x-shockwave-flash" name="45player" data="http://www.green-scene.com/mediaplayer/player.swf">
    <param name="allowfullscreen" value="true">
    <param name="allowscriptaccess" value="always">
    <param name="wmode" value="transparent">
    <param name="flashvars" value="file=http://www.green-scene.com/uploads/videos/original/video_45_1318559535.flv&autostart=true&skin=http://www.green-scene.com/js/skin.zip">
    </object>

主页(非fancybox):

    <object id="45player" width="480" height="385" type="application/x-shockwave-flash" name="45player" data="http://www.green-scene.com/mediaplayer/player.swf">
    <param name="allowfullscreen" value="true">
    <param name="allowscriptaccess" value="always">
    <param name="wmode" value="transparent">
    <param name="flashvars" value="file=http://www.green-scene.com/uploads/videos/original/video_45_1318559535.flv&autostart=true&skin=http://www.green-scene.com/js/skin.zip">
    </object>

主页没有问题。但是fancybox确实如此。那我错过了什么?

感谢您的帮助!

更新刚刚做出有趣的发现。如果我单击播放器控制栏中的按钮以扩展到全屏,它将全屏显示,我可以单击播放实际播放它。如果我单击按钮返回正常大小(或点击esc),它将继续在fancybox中播放。但是如果我尝试点击暂停,它就会消失并给我相同的错误信息。

UPDATE#2 关闭上面的Internet Explorer,它运行得很好。但Firefox和Safari在上面给出了同样的错误。这令人难以置信。

更新#3 当影子框打开时,我能够让视频自动播放,但现在您无法暂停或在Mac上的Firefox或Safari中全屏显示。但IE 8/9仍然可以正常工作。

1 个答案:

答案 0 :(得分:1)

好的,我查看了你的页面,我看到每个拇指都会触发一个功能点击:

onclick="return show_modelpoup('//parameters')"

位于archives.js文件内的函数show_modelpoup()通过jQuery html()构建带有id="shadowbox_archives"的DIV的内容

jQuery('#shadowbox_archives').html();

也会将Fancybox绑定到同一个选择器

jQuery('#shadowbox_archives').fancybox();

...稍后,同样的函数使用API​​方法$.fancybox.open()触发Fancybox(没有影子框)......到目前为止一直很好!?!?

这里发生的事情是Fancybox内部的实际内容是带有id="shadowbox_archives"的DIV(也绑定到Fancybox),因此每次点击此类DIV内的任何部分时,您的swf控件或其他地方(即使在空白区域)它会再次尝试触发Fancybox(此时没有指示内容应该是什么)因此错误“无法加载请求的内容。请稍后再试。

将Fancybox绑定到将在Fancybox中打开的相同内容(选择器)会产生循环效果,因此您需要重新制定show_modelpoup()函数以更改它,

...或者您可能只需要在加载Flash内容后直接触发Fancybox的方式修改flashloaded()函数(在show_modelpoup()内),例如:

function flashloaded() {
    jQuery.fancybox({
        href: '#shadowbox_archives',
        padding: 10,
        type: 'html',  
        height: 520,
        width: 600
    });
    // jQuery.fancybox.open(jQuery('#shadowbox_archives'));
}

请注意,我注释掉了API方法$.fancybox.open()

<强>更新

由于您使用的是内联内容,因此flashloaded()函数应如下所示:

function flashloaded() {
    jQuery.fancybox({
        href: '#shadowbox_archives',
        autoSize: false,
        padding: 10,
        type: 'inline',  // no html
        height: 520,
        width: 600
    });
    // jQuery.fancybox.open(jQuery('#shadowbox_archives'));
}