Safari及更高版本的Java Applet z-index

时间:2009-03-12 14:34:14

标签: java html applet overlay z-index

网页中J​​ava Applet的一个众所周知的问题是,浏览器会忽略applet标记的z-index与页面中的其他组件。无论你如何在页面中定位和z-index元素,applet都会在所有内容之上绘制自己。

有一种解决方法,称为iframe垫片,如下所述:http://www.oratransplant.nl/2007/10/26/using-iframe-shim-to-partly-cover-a-java-applet/

但是,此解决方法在Windows中的Safari 3或4中不起作用(对于Mac,假设相同)。

有没有人知道如何让它在Safari中运行?

有没有人有关于如何压迫Sun解决潜在问题的想法,以便我们可以避免笨拙的垫片?以下是关于该问题的错误报告http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6646289,请注意它已开放一年,但其他错误报告可以追溯到很多年。

这太令人沮丧了,难道孙不明白这是将Java作为在浏览器中做一些很酷的事情的边缘化的事情吗?我爱你Java,但你没有帮助你的情况...

3 个答案:

答案 0 :(得分:5)

这个问题有一个棘手的解决方案。没有必要将代码放在iframe中。我们可以在applet上方创建一个虚拟iframe。然后,带有文本的绝对div可以轻松放在iframe之上。

工作示例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Applet z index issue</title>
<style>

.applet {width:400px; margin:0 auto; text-align:center; border:1px solid #000; left:40%; position:absolute }
.iframe {width:400px;  background:#fff; position:absolute; border:1px solid #f00; position:absolute; left:45%; top:20px; z-index:9; height:201px;}
.message { width:250px; border:1px solid #000; background:#fff; height:150px; color:#fff; text-align:center;  z-index:99; background:#555;  float:left; position:absolute; left:45%; top:20px}

 </style>
</head>

<body>
<div class="message">Message</div>
<div class="iframe"><iframe style="width:500px; height:205px; background:none; border:none"> </iframe></div>
<div class="applet">

<applet code="Bubbles.class" width="400" height="350">
Java applet that draws animated bubbles.
</applet>

</div>

</body>
</html>

答案 1 :(得分:3)

实际上问题根本与z-index无关。它是由Netscape Plugin API(NPAPI)的“窗口”绘图模型引起的。

你不能做任何事情(垫片除外)。插件作者必须rewrite it using windowless API

答案 2 :(得分:2)

首先,Mac上的Java实际上是由Apple而不是Sun构建的。对于applet,我们隐藏applet,当它们出现在它上面时。但这可能不足以满足您的需求。