嵌入式Flash对象的HTML包装器div不能被jQuery“可点击”

时间:2010-05-27 23:59:35

标签: javascript jquery flash

我一直在尝试按客户端要求执行此操作:一旦客户点击了swf格式的顶部横幅,就会重定向到广告系列页面,然后再转到目标网页。

您可以查看已执行的操作:http://ausdcf.org

如果您使用的是Firefox,Chrome或Safari,我怀疑您可以访问目标网页。

但是,如果您使用的是IE或Opera,我对此表示怀疑。

我认为导致这样一个奇怪的问题是:

swf ojbects没有指向url的链接,SO

我必须像这样破解主题模板文件:

<div id="header">';

/*
     * A quick and dirty way to put some swf into PHP, and rotate among them ...
     */ 

    //available banners
    $banners = array(
                         'http://localhost/smf/flash/banner_fertalign_1.swf',
                         'http://localhost/smf/flash/banner_fertalign_2.swf',
                         'http://localhost/smf/flash/banner_fertalign_3.swf'
                    );

    //get random banner
    srand((double) microtime() * 1000000);
    $rand = rand(0,count($banners)-1);

    echo '<div id="top_banner_clickable">';
    echo     '<div id="top_banner_wrapper">';
    echo         '<object width="400" height="60">';
    echo             '<param name="wmode" value="transparent">';
    echo             '<embed wmode="transparent" src="'.$banners[$rand].'" ';
    echo             'width="400" height="60" type="application/x-shockwave-flash"';
    echo             'pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" />';
    echo         '</object>';
    echo     '</div>';
    echo '</div>';

相关的jQuery代码是这样的:

/* master.js */

$(document).ready(function()
{
    $("#top_banner_clickable").click(function()
    {
        window.location ="http://ausdcf.org/campaign/";
    });
});

我对Flash或嵌入对象一无所知。我猜这就是这个问题的原因。另外,我不知道为什么它适用于某些浏览器但不是全部......

我甚至尝试在css中的包装div中添加一个z-index,如下所示:

#top_banner_clickable
{
    z-index : 100;
}

不,这不行,或者......

有没有办法解决这个问题?

更新:

我试图说服客户现在使用Google AdSense进行此类活动......

非常感谢提前。

2 个答案:

答案 0 :(得分:2)

您不能使用javascript来捕捉flash对象上的点击事件。您可以找到类似的问题herehere

您可以建议您的客户修改Flash的源代码以处理点击。如果无法做到这一点,请使用容器flash对象来托管横幅。

答案 1 :(得分:1)

我认为问题在于Flash正在吞噬点击事件并防止冒泡到文档的其余部分。或者Flash正在干扰jQuery针对event propagation的不一致模型的解决方案。所以我认为要做的是添加一个漂浮在flash电影之上的div,但它是一个兄弟(电影或其中一个父母)。像这样:

echo '<div id="top_banner_clickable">';
echo     '<div id="top_banner_wrapper">';
echo         '<object width="400" height="60">';
echo             '<param name="wmode" value="transparent">';
echo             '<embed wmode="transparent" src="'.$banners[$rand].'" ';
echo             'width="400" height="60" type="application/x-shockwave-flash"';
echo             'pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" />';
echo         '</object>';
echo         '<div id="clickableoverlay"></div>'; // float this div above the movie
echo     '</div>';
echo '</div>';

使用CSS让#clickableoverlay位于电影的顶部并将click()应用于该电影。如果<div>出现在<object>之后,我认为你不应该在这里使用z-index。小心使用wmode="transparent"(你是!)或wmode="opaque"。如果您使用wmode="window",则无论您尝试使用哪种CSS,Flash影片都将始终位于其他所有内容之上。