From 1b188073c46c5c21bb8ddeb21674452c9bc414fd Mon Sep 17 00:00:00 2001 From: Marc Englund Date: Wed, 8 May 2013 09:31:09 +0300 Subject: Remove pre-loader element after pre-loading, fixes #10863 Change-Id: Ibd2009315aadb25e574c82f3b4b54c501d9b1395 Ticket: 10863 --- client/src/com/vaadin/client/ResourceLoader.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'client/src') diff --git a/client/src/com/vaadin/client/ResourceLoader.java b/client/src/com/vaadin/client/ResourceLoader.java index b3b9ac7256..7fc8b4f9f3 100644 --- a/client/src/com/vaadin/client/ResourceLoader.java +++ b/client/src/com/vaadin/client/ResourceLoader.java @@ -50,8 +50,8 @@ public class ResourceLoader { * Event fired when a resource has been loaded. */ public static class ResourceLoadEvent { - private ResourceLoader loader; - private String resourceUrl; + private final ResourceLoader loader; + private final String resourceUrl; private final boolean preload; /** @@ -286,25 +286,35 @@ public class ResourceLoader { // Inject loader element if this is the first time this is preloaded // AND the resources isn't already being loaded in the normal way - Element element = getPreloadElement(url); + final Element element = getPreloadElement(url); addOnloadHandler(element, new ResourceLoadListener() { @Override public void onLoad(ResourceLoadEvent event) { fireLoad(event); + Document.get().getBody().removeChild(element); } @Override public void onError(ResourceLoadEvent event) { fireError(event); + Document.get().getBody().removeChild(element); } }, event); - // TODO Remove object when loaded (without causing spinner in FF) Document.get().getBody().appendChild(element); } } private static Element getPreloadElement(String url) { + /*- + * TODO + * In Chrome, FF: + * does not fire event if resource is 404 -> eternal spinner. + * always fires onerror -> no way to know if it loaded -> eternal spinner + *