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 [email protected].
>>>>>>> To unsubscribe from this group, send email to
>>>>>>> [email protected].
>>>>>>> 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 [email protected].
>>>>>> To unsubscribe from this group, send email to
>>>>>> [email protected].
>>>>>> 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 [email protected].
>>>>> To unsubscribe from this group, send email to
>>>>> [email protected].
>>>>> 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 [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected].
>>>> 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 [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> 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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.