Javascript 嵌入flash对象上的HTML包装器div不能为;可点击“;通过jQuery

Javascript 嵌入flash对象上的HTML包装器div不能为;可点击“;通过jQuery,javascript,jquery,flash,Javascript,Jquery,Flash,我一直在尝试按照客户的要求做:一旦客户点击swf格式的顶部横幅,就重定向到活动页面,然后再重定向到目标页面 您可以在以下位置查看已完成的操作: 如果您使用的是Firefox、Chrome或Safari,我怀疑您可以访问目标页面 然而,如果你正在使用IE或Opera,我对此表示怀疑 我认为造成这种奇怪问题的原因是: swf ojbects没有指向url的链接,因此 我必须像这样破解主题模板文件: <div id="header">'; /*

我一直在尝试按照客户的要求做:一旦客户点击swf格式的顶部横幅,就重定向到活动页面,然后再重定向到目标页面

您可以在以下位置查看已完成的操作:

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

然而,如果你正在使用IE或Opera,我对此表示怀疑

我认为造成这种奇怪问题的原因是:

swf ojbects没有指向url的链接,因此

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

<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>';
我对Flash或嵌入式对象一无所知。我想这就是问题的原因。另外,我不知道为什么它可以在一些浏览器上使用,但不是所有的浏览器

我甚至尝试向css中的包装器div添加z索引,如下所示:

/* master.js */

$(document).ready(function()
{
    $("#top_banner_clickable").click(function()
    {
        window.location ="http://ausdcf.org/campaign/";
    });
});
#top_banner_clickable
{
    z-index : 100;
}
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>';
不,这也不行

有办法解决这个问题吗

更新:

<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>';
我现在正试图说服客户使用谷歌AdSense来做这类事情……


非常感谢。

我认为问题在于Flash正在吞没click事件,并阻止在文档的其余部分冒泡。或者Flash干扰了jQuery针对不一致模型的解决方案。因此,我认为要做的是添加一个div,它漂浮在flash电影之上,但它是(电影的)兄弟姐妹或它的父母之一。大概是这样的:

/* master.js */

$(document).ready(function()
{
    $("#top_banner_clickable").click(function()
    {
        window.location ="http://ausdcf.org/campaign/";
    });
});
#top_banner_clickable
{
    z-index : 100;
}
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>';
echo';
回声';
回声';
回声';
回声';
回声';
回显“”;//将此div漂浮在电影上方
回声';
回声';

使用CSS将#clickableoverlay放置在电影的顶部,并将您的
click()
应用到该位置。如果
出现在
之后,我认为您不需要在这里使用z-index。请小心使用
wmode=“transparent”
(您就是!)或
wmode=“不透明”
。如果您使用
wmode=“window”
,flash电影将始终位于其他所有内容之上,无论您尝试使用什么CSS

我认为问题在于Flash吞噬了click事件,并阻止了文档其余部分的冒泡。或者Flash干扰了jQuery针对不一致模型的解决方案。因此,我认为要做的是添加一个div,它漂浮在flash电影之上,但它是(电影的)兄弟姐妹或它的父母之一。大概是这样的:

/* master.js */

$(document).ready(function()
{
    $("#top_banner_clickable").click(function()
    {
        window.location ="http://ausdcf.org/campaign/";
    });
});
#top_banner_clickable
{
    z-index : 100;
}
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>';
echo';
回声';
回声';
回声';
回声';
回声';
回显“”;//将此div漂浮在电影上方
回声';
回声';

使用CSS将#clickableoverlay放置在电影的顶部,并将您的
click()
应用到该位置。如果
出现在
之后,我认为您不需要在这里使用z-index。请小心使用
wmode=“transparent”
(您就是!)或
wmode=“不透明”
。如果您使用
wmode=“window”
,flash电影将始终位于其他所有内容之上,无论您尝试使用什么CSS

不能使用javascript捕捉flash对象顶部的点击事件。你可以找到类似的问题和答案


您可以建议您的客户修改flash的源代码以处理点击。如果这是不可能的,那么使用容器flash对象来承载横幅。

您不能使用javascript捕捉flash对象顶部的点击事件。你可以找到类似的问题和答案


您可以建议您的客户修改flash的源代码以处理点击。如果这是不可能的,那么使用容器flash对象来承载横幅。

非常感谢您的提示。然而,这仍然不能解决IE中的问题。。。一定是出了什么问题,我在与之抗争:(非常感谢您的提示。但是,这仍然无法解决IE中的问题……一定是出了什么问题,我在与之抗争:(恐怕是这样。但是,我仍然不明白为什么Firefox、Safari和Chrome会重定向到设计页面……所以它们是“智能浏览器”?我不知道为什么会发生这种情况。至少另一个SO用户报告了相同的事情(请参阅我答案中的第二个链接)。但这不是预期的行为。Flash对象是其区域的完全所有者。您不能期望您可以使用浏览器功能修改外观或捕获事件。恐怕是这样。但是,我仍然不明白为什么Firefox、Safari和Chrome会重定向到设计页面……所以它们是“智能浏览器”?我不知道为什么会发生这种情况。至少另一个SO用户报告了相同的情况(请参阅我回答中的第二个链接)。但这不是预期的行为。Flash对象是其区域的完全所有者。您不能期望您可以使用浏览器功能修改外观或捕获事件。