如何在ActiveX上保留下拉菜单

时间:2012-12-28 01:20:53

标签: javascript css activexobject

我在所有网页上都有一个由JavaScript创建的下拉菜单,有些列最多包含20个项目。此下拉列表显示在Mozilla浏览器中的所有内容的最顶层,但在Internet Explorer中,当ActiveX对象显示在其下方时,它会被部分覆盖。

我尝试在DIV层显示ActiveX并设置z-index但到目前为止我还没有找到有效的解决方案。向对象标签添加样式没有效果......

<object etc style='z-index:3;'>

将样式应用于包含该对象的DIV也没有效果......

<div align="center" style="z-index:2;">

下拉菜单应用了z-index = 1。向对象添加'wmode'参数也不起作用......

<param name='wmode' value='transparent'>

2 个答案:

答案 0 :(得分:1)

显然问题是进程内进程和进程外插件。进程内插件(和activex)将在与Web页面本身相同的环境中运行,并遵循z-ordering。但是在进程中很少见。大多数浏览器在单独的进程中运行插件和activex,因此网页在一个进程中,而activex /插件处于不同的进程中。浏览器通过使插件/ activex在包含网页的屏幕区域中自行绘制,使得它成为一个单独的进程,但你了解它的烟雾和镜像,并且几乎忽略了z-ordering。它绘制网页(包括菜单),然后它导致插件/ activex绘制。

围绕它的唯一方法(并不总是有效)是将html菜单包装在iframe中。

答案 1 :(得分:0)

我想在这里扩展这个问题。 WilliamK提供的答案是有点朝着正确的方向但是并没有真正解释问题的真正原因,也没有提供足够的解决方案。

问题的主要原因是某些UI元素在窗口上下文(相对于无窗口)中呈现,这基本上意味着它在单独的操作系统级别呈现在浏览器上发生而在浏览器中发生的过程。这遵循WilliamK试图解释的内容,除了浏览器这些天是多线程的,因此&#34;进程外&#34;并不能讲述整个故事。 Here's a great explanation of windowed vs. windowless

一个简单的解决方案就是不在 iframe中呈现,而是让后面在任何想要在另一个窗口对象上呈现的内容。最好用例子来解释。假设<object>是在其自己的窗口上下文中呈现的某个ActiveX或Flash对象:

<style>
.overlay {
    position: absolute;

    /* adjust for your site - values shown here are arbitrary */
    width: 600px;
    height: 600px;
    top: 100px;
    left: 100px;
    z-index: 1;
    overflow: auto;
}

.overlay-content {
    position: relative;
    z-index: 2;
}

.overlay iframe {
    position: absolute;
    z-index: 1;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}
</style>

<body>
    <object ...></object>
    <div class="overlay">
        <div class="overlay-content">This is content you want to appear on top of the windowed object</div>
        <iframe border="0"></iframe>
    </div>
</body>