how add a click listener handler on an gwt frame ( solved ) : We can't wrap a widget around an element from an iframe but we can add it to the event listener.
public class CustomFrame extends Frame { public CustomFrame(){ sinkEvents(Event.ONLOAD); setUrl("http://127.0.0.1:8888/test.html"); setSize("900px","900px"); } private void init(){ IFrameElement iframe = IFrameElement.as(this.getElement()); Document iframeDocument = iframe.getContentDocument(); Element el = (Element) iframeDocument.getElementById("testiframe"); Event.setEventListener(el, new EventListener() { @Override public void onBrowserEvent(Event event) { Window.alert("CLIIIICKKK : "+event.getTarget().getId()); } }); Event.sinkEvents(el, Event.ONCLICK); } public void onBrowserEvent(Event event){ super.onBrowserEvent(event); switch (DOM.eventGetType(event)){ case Event.ONLOAD: init(); DOM.eventPreventDefault(event); break; } } } Thanks Fabio for your help. On Sunday, October 28, 2012 11:41:13 AM UTC-5, Hugues wrote: > > Ok i see why , look at the source code of anchor : > public static Anchor wrap(Element element) { > // Assert that the element is attached. > assert Document.get().getBody().isOrHasChild(element); > > This element is not a child of the main Document .... So this wrap can't > work > > On Sunday, October 28, 2012 11:37:15 AM UTC-5, Hugues wrote: >> >> In fact it does not work :-/ >> >> I don't understand. In my debug i see the correct element but the wrap >> fail. I suppose the wrap fail because the element is not attached to the >> main DOM. >> Is it possible in gwt to wrap an element from an iframe as widget >> attached to the main module ? >> >> Element currentElement = this.getElement(); >> IFrameElement iframe = IFrameElement.as(currentElement); >> Document iframeDocument = iframe.getContentDocument(); >> Element el= (Element) iframeDocument.getElementById("testiframe"); >> final Anchor testButton = Anchor.wrap(el); >> testButton.addClickHandler(new ClickHandler() { >> public void onClick(ClickEvent event) { >> Window.alert("CLIIIICKKK "); >> } >> }); >> >> >> >> On Sunday, October 28, 2012 2:40:22 AM UTC-5, Fabio wrote: >>> >>> Well, if it works good for you... >>> >>> But if you created a ScriptElement with the function test equal to i.e. >>> "function clickMe { window.alert("Click")}" >>> and then on the ButtonElement you set the value i.e. >>> setValue("clickMe()") it worked as well.... >>> >>> anyway >>> >>> you're welcome!!!! >>> >>> Il 28/10/2012 01:29, Hugues ha scritto: >>> >>> Just to let you know i tried something like that : >>> The wrap work perfectly with an element of the current dom but with an >>> element i get from the iframe it does not work >>> >>> Code sample : >>> >>> IFrameElement iframe = IFrameElement.as(this.getElement()); >>> Document iframeDocument = iframe.getContentDocument(); >>> Element el = (Element) iframeDocument.getElementById("myhrefElement"); >>> Anchor testButton = Anchor.wrap(el); >>> testButton.addClickHandler(new ClickHandler() { >>> public void onClick(ClickEvent event) { >>> Window.alert("CLIIIICKKK "); >>> } >>> }); >>> >>> By the way , thanks for your help >>> >>> On Saturday, October 27, 2012 4:58:16 PM UTC-5, Fabio wrote: >>>> >>>> EXACTLY >>>> >>>> get the Document, creaate a ButtonElement from the Document. >>>> But you must also create a ScriptElement and set the text of the >>>> function and then call click from the ButtonElement >>>> >>>> >>>> >>>> >>>> Il 27/10/2012 23:48, Hugues Lara ha scritto: >>>> >>>> So i should get my Document of my iframe. After i get my div element >>>> and to this div element i add a child and this child is a ButtonElement >>>> ... >>>> I can try that >>>> >>>> On Saturday, October 27, 2012 4:46:25 PM UTC-5, Fabio wrote: >>>>> >>>>> Hi Lara >>>>> >>>>> you can not replace the element with your button becasue your Button >>>>> is a Widget >>>>> while the button that you want to put in there must be a ButtonElement >>>>> >>>>> why ? >>>>> because the Widget are used by GWT to translate that code into >>>>> javascript. >>>>> Once translated in javascript work is done. >>>>> In your case you download a web page with the Frame, then google ALSO >>>>> provides mechanism to manipulate html page and Javascript >>>>> so your html page now must be handled by a reverse engineering and >>>>> threat that button as a ButtonElement >>>>> >>>>> is that clear ? >>>>> >>>>> Il 27/10/2012 23:38, Hugues Lara ha scritto: >>>>> >>>>> To be honest i don't get it at all ... >>>>> An other idea was to get the Document of the Iframe. That i got it , i >>>>> even find the element i want by parsing the html. >>>>> But i dunno how replace this Element by a GWT button attached to my >>>>> main module ( I think it's necessary to show my popup ). >>>>> >>>>> Thanks, >>>>> >>>>> On Saturday, October 27, 2012 4:28:03 PM UTC-5, Fabio wrote: >>>>>> >>>>>> No you can't do that, but you have to take this other way: >>>>>> >>>>>> extending our target, you want to add a Widget, because your button >>>>>> is a Widget, into a Document as javascript language provides. >>>>>> Infact you get a Document made by Elements. >>>>>> >>>>>> So I think you have to use the method appendChild where the child is >>>>>> a ButtonElement >>>>>> >>>>>> see >>>>>> >>>>>> >>>>>> http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/index.html?com/google/gwt/dom/client/ButtonElement.html >>>>>> >>>>>> so you have to simulate javascript. >>>>>> >>>>>> The Button you mean is a Widget and use to CREATE a javascript, in >>>>>> that case everything has been already translated into javascript >>>>>> >>>>>> >>>>>> is that clear ? >>>>>> >>>>>> Il 27/10/2012 22:56, Hugues Lara ha scritto: >>>>>> >>>>>> Hi, >>>>>> >>>>>> My goal is to set gwt button inside my iFrame. If I do a >>>>>> RootPanel.get("my id").add(myButton) , it don't work because the id is >>>>>> inside the iFrame. >>>>>> I find out how get the Document of the iframe and get the Div Element >>>>>> but i still don't know how set a button on this div. >>>>>> >>>>>> Thanks, >>>>>> >>>>>> On Saturday, October 27, 2012 3:38:59 PM UTC-5, Fabio wrote: >>>>>>> >>>>>>> Hi >>>>>>> >>>>>>> did you add a ClickHandler ? it doesnt seems to implements a >>>>>>> clickHandler >>>>>>> >>>>>>> bye >>>>>>> >>>>>>> >>>>>>> Il 27/10/2012 22:07, Hugues Lara ha scritto: >>>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I am actually migrate a web application to GWT. In order to reuse >>>>>>> the existing page i put them in frame. However i have to develop a new >>>>>>> popup for one of them and i would like to let this popup attached to >>>>>>> the >>>>>>> main module. >>>>>>> Before i was parsing the html to get the element and with RootPanel >>>>>>> attach a button. I can't do that anymore because it's in an Iframe. >>>>>>> So i try to fire an event on click inside the iFrame to get the >>>>>>> current element and if it's the right button show the popup ... >>>>>>> >>>>>>> The ONLOAD event work pretty well but the ONCLICK don't work at >>>>>>> all >>>>>>> >>>>>>> my code sample : >>>>>>> >>>>>>> package com.exp.client; >>>>>>> >>>>>>> import com.google.gwt.user.client.DOM; >>>>>>> import com.google.gwt.user.client.Event; >>>>>>> import com.google.gwt.user.client.ui.Frame; >>>>>>> import com.google.gwt.user.client.Window; >>>>>>> >>>>>>> public class CustomFrame extends Frame { >>>>>>> public CustomFrame(){ >>>>>>> sinkEvents(Event.ONCLICK); >>>>>>> sinkEvents(Event.ONLOAD); >>>>>>> setUrl("http://www.google.com" <http://www.google.com>); >>>>>>> setSize("900px","900px"); >>>>>>> } >>>>>>> public void onBrowserEvent(Event event){ >>>>>>> super.onBrowserEvent(event); >>>>>>> switch (DOM.eventGetType(event)) >>>>>>> { >>>>>>> case Event.ONCLICK: >>>>>>> Window.alert("ONCLICK : "+ >>>>>>> event.getEventTarget().toString() ); >>>>>>> DOM.eventPreventDefault(event); >>>>>>> break; >>>>>>> case Event.ONLOAD: >>>>>>> Window.alert("ONLOAD"); >>>>>>> DOM.eventPreventDefault(event); >>>>>>> break; >>>>>>> } >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> Thanks for your help >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Google Web Toolkit" group. >>>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msg/google-web-toolkit/-/-_OuFX0mHJUJ. >>>>>>> To post to this group, send email to google-we...@googlegroups.com. >>>>>>> To unsubscribe from this group, send email to >>>>>>> google-web-toolkit+unsubscr...@googlegroups.com. >>>>>>> For more options, visit this group at >>>>>>> http://groups.google.com/group/google-web-toolkit?hl=en. >>>>>>> >>>>>>> >>>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Google Web Toolkit" group. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msg/google-web-toolkit/-/9ooi7wPMfIAJ. >>>>>> To post to this group, send email to google-we...@googlegroups.com. >>>>>> To unsubscribe from this group, send email to >>>>>> google-web-toolkit+unsubscr...@googlegroups.com. >>>>>> For more options, visit this group at >>>>>> http://groups.google.com/group/google-web-toolkit?hl=en. >>>>>> >>>>>> >>>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Google Web Toolkit" group. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msg/google-web-toolkit/-/ThnSB9ylmsQJ. >>>>> To post to this group, send email to google-we...@googlegroups.com. >>>>> To unsubscribe from this group, send email to >>>>> google-web-toolkit+unsubscr...@googlegroups.com. >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/google-web-toolkit?hl=en. >>>>> >>>>> >>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Google Web Toolkit" group. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msg/google-web-toolkit/-/ZRNm0TfdPHMJ. >>>> To post to this group, send email to google-we...@googlegroups.com. >>>> To unsubscribe from this group, send email to >>>> google-web-toolkit+unsubscr...@googlegroups.com. >>>> For more options, visit this group at >>>> http://groups.google.com/group/google-web-toolkit?hl=en. >>>> >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Google Web Toolkit" group. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msg/google-web-toolkit/-/9_ZN-cin6a8J. >>> To post to this group, send email to google-we...@googlegroups.com. >>> To unsubscribe from this group, send email to >>> google-web-toolkit+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/google-web-toolkit?hl=en. >>> >>> >>> -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/lfEU5WOdgMcJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.