3

我在所有页面上都有一个由 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'>
4

2 回答 2

1

显然问题在于进程内插件与进程外插件。进程内插件(和 activex)将在与网页本身相同的环境中运行并遵循 z 顺序。但在进程中很少见。大多数浏览器在单独的进程中运行插件和activex,因此网页在一个进程中,而activex/plugin 在不同的进程中。浏览器通过使插件/activex 在包含网页的屏幕区域中绘制自身来使其看起来像一个单一的过程,但是您了解它的烟雾和镜子,并且 z 排序实际上被忽略了。它绘制网页(包括菜单)然后导致插件/activex 绘制。

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

于 2013-01-07T03:56:22.593 回答
0

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

问题的主要原因是某些 UI 元素是在窗口上下文(与无窗口)中呈现的,这基本上意味着它是在一个单独的操作系统级进程中呈现的,该进程发生在浏览器之上,而不是浏览器内. 这遵循了 WilliamK 试图解释的内容,除了现在的浏览器是多线程的,因此“进程外”并不能说明全部情况。 这是 windowed vs. windowless 的一个很好的解释

一个简单的解决方案不是iframe 中渲染某些内容,而是让 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>
于 2014-12-18T20:31:59.827 回答