The shim iframe causes crashes in IE6 and does not really help in Opera/Safari/Firefox. svn changeset:24146/svn branch:6.8tags/7.0.0.beta1
<html> | |||||
<body> | |||||
<applet code="com/vaadin/tests/components/embedded/TestApplet/class"></applet> | |||||
</body> | |||||
</html> |
} | } | ||||
private IFrameElement getShimElement() { | private IFrameElement getShimElement() { | ||||
if (shimElement == null) { | |||||
if (shimElement == null && useShimIframe()) { | |||||
shimElement = Document.get().createIFrameElement(); | shimElement = Document.get().createIFrameElement(); | ||||
// Insert shim iframe before the main overlay element. It does not | // Insert shim iframe before the main overlay element. It does not | ||||
DOM.setStyleAttribute(shadow, "display", progress < 0.9 ? "none" | DOM.setStyleAttribute(shadow, "display", progress < 0.9 ? "none" | ||||
: ""); | : ""); | ||||
} | } | ||||
updatePositionAndSize((Element) Element.as(getShimElement()), | |||||
positionAndSize); | |||||
if (useShimIframe()) { | |||||
updatePositionAndSize((Element) Element.as(getShimElement()), | |||||
positionAndSize); | |||||
} | |||||
// Opera fix, part 2 (ticket #2704) | // Opera fix, part 2 (ticket #2704) | ||||
if (BrowserInfo.get().isOpera() && isShadowEnabled()) { | if (BrowserInfo.get().isOpera() && isShadowEnabled()) { | ||||
RootPanel.get().getElement().insertBefore(shadow, getElement()); | RootPanel.get().getElement().insertBefore(shadow, getElement()); | ||||
sinkShadowEvents(); | sinkShadowEvents(); | ||||
} | } | ||||
if (!isShimAttached()) { | |||||
if (useShimIframe() && !isShimAttached()) { | |||||
RootPanel.get().getElement() | RootPanel.get().getElement() | ||||
.insertBefore(shimElement, getElement()); | .insertBefore(shimElement, getElement()); | ||||
} | } | ||||
} | } | ||||
/** | |||||
* Returns true if we should add a shim iframe below the overlay to deal | |||||
* with zindex issues with PDFs and applets. Can be overriden to disable | |||||
* shim iframes if they are not needed. | |||||
* | |||||
* @return true if a shim iframe should be added, false otherwise | |||||
*/ | |||||
protected boolean useShimIframe() { | |||||
BrowserInfo info = BrowserInfo.get(); | |||||
return info.isIE() && info.isBrowserVersionNewerOrEqual(8, 0); | |||||
} | |||||
private void updatePositionAndSize(Element e, | private void updatePositionAndSize(Element e, | ||||
PositionAndSize positionAndSize) { | PositionAndSize positionAndSize) { | ||||
e.getStyle().setLeft(positionAndSize.getLeft(), Unit.PX); | e.getStyle().setLeft(positionAndSize.getLeft(), Unit.PX); |
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | |||||
<head profile="http://selenium-ide.openqa.org/profiles/test-case"> | |||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | |||||
<link rel="selenium.base" href="" /> | |||||
<title>EmbeddedClickListenerRelativeCoordinates</title> | |||||
</head> | |||||
<body> | |||||
<table cellpadding="1" cellspacing="1" border="1"> | |||||
<thead> | |||||
<tr><td rowspan="1" colspan="3">EmbeddedClickListenerRelativeCoordinates</td></tr> | |||||
</thead><tbody> | |||||
<tr> | |||||
<td>open</td> | |||||
<td>/run/com.vaadin.tests.components.embedded.EmbeddedApplet?restartApplication</td> | |||||
<td></td> | |||||
</tr> | |||||
<tr> | |||||
<td>screenCapture</td> | |||||
<td></td> | |||||
<td>with-applet</td> | |||||
</tr> | |||||
<tr> | |||||
<td>click</td> | |||||
<td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedApplet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td> | |||||
<td></td> | |||||
</tr> | |||||
<tr> | |||||
<td>screenCapture</td> | |||||
<td></td> | |||||
<td>without-applet</td> | |||||
</tr> | |||||
</tbody></table> | |||||
</body> | |||||
</html> |
package com.vaadin.tests.components.embedded; | |||||
import com.vaadin.terminal.ExternalResource; | |||||
import com.vaadin.tests.components.TestBase; | |||||
import com.vaadin.ui.Button; | |||||
import com.vaadin.ui.Button.ClickEvent; | |||||
import com.vaadin.ui.Embedded; | |||||
import com.vaadin.ui.Label; | |||||
import com.vaadin.ui.Window; | |||||
public class EmbeddedApplet extends TestBase { | |||||
@Override | |||||
protected String getDescription() { | |||||
return "The sub window should be shown on top of the embedded applet"; | |||||
} | |||||
@Override | |||||
protected Integer getTicketNumber() { | |||||
return 8399; | |||||
} | |||||
@Override | |||||
public void setup() { | |||||
final Embedded applet = new Embedded(); | |||||
applet.setType(Embedded.TYPE_BROWSER); | |||||
applet.setWidth("400px"); | |||||
applet.setHeight("300px"); | |||||
applet.setSource(new ExternalResource("/statictestfiles/applet.html")); | |||||
addComponent(applet); | |||||
addComponent(new Button("Remove applet", new Button.ClickListener() { | |||||
public void buttonClick(ClickEvent event) { | |||||
removeComponent(applet); | |||||
} | |||||
})); | |||||
Window window = new Window("Testwindow"); | |||||
window.addComponent(new Label("I am inside the window")); | |||||
applet.getWindow().addWindow(window); | |||||
} | |||||
} |
package com.vaadin.tests.components.embedded; | |||||
import java.applet.Applet; | |||||
import java.awt.Graphics; | |||||
public class TestApplet extends Applet { | |||||
@Override | |||||
public void paint(Graphics g) { | |||||
g.drawString("Hello, I am an applet! Look at me!", 10, 20); | |||||
} | |||||
} |