Re: com.google.gwt.user.client.ui.Frame + Event handler / GWT 2.5

381 views
Skip to first unread message
Message has been deleted

Fabio

unread,
Oct 27, 2012, 4:36:12 PM10/27/12
to google-we...@googlegroups.com
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);
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-tool...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.

Message has been deleted

Fabio

unread,
Oct 27, 2012, 5:25:10 PM10/27/12
to google-we...@googlegroups.com
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,
To unsubscribe from this group, send email to google-web-toolkit+unsub...@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.
Message has been deleted

Fabio

unread,
Oct 27, 2012, 5:43:38 PM10/27/12
to google-we...@googlegroups.com
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,
Message has been deleted

Fabio

unread,
Oct 27, 2012, 5:55:39 PM10/27/12
to google-we...@googlegroups.com
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
Message has been deleted

Fabio

unread,
Oct 28, 2012, 3:36:54 AM10/28/12
to google-we...@googlegroups.com
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
Message has been deleted
Message has been deleted
Message has been deleted

Fabio

unread,
Oct 28, 2012, 1:27:11 PM10/28/12
to google-we...@googlegroups.com
Hi

have you tried my snippet ?

create a ScriptElement and set the function text setText i.e. "function clickMe() {windows.alert('YEA')}"
http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/dom/client/ScriptElement.html#setText(java.lang.String)

Then create a ButtonElement with Document.createButtonElement()
you should get the way to add in the innerHtml onClick="clickMe()"
IT SHOULD BE the setPropertyString method

setPropertyString

public final void setPropertyString(java.lang.String name,
                                    java.lang.String value)
Sets a property on this element.
Parameters:
name - the name of the property to be set
value - the new property value

name = onClick
value = "clickMe()"

remember that Html works as well as XML so the onClick is an attribute.......

Il 28/10/2012 17:41, Hugues ha scritto:
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);

Jens

unread,
Oct 28, 2012, 2:11:50 PM10/28/12
to google-we...@googlegroups.com
Remember to clean up the EventListener when you don't need it anymore. Failure to do so can result in memory leaks.

-- J.
Reply all
Reply to author
Forward
0 new messages