¿Cómo ejecutar la función JavaScript desde GWT Java con JSNI? [duplicar

Esta pregunta ya tiene una respuesta aquí:

¿Cómo llamar a la función Java GWT desde Javascript? 1 respuesta

No puedo entender del manual: ¿cómo ejecutar realmente la función JS desde Java?

Por ejemplo, tengo una función en mi página html:

<script type="text/javascript" language="javascript">
    function foo() {
        alert('Foo!');
    }
</script>

l siguiente módulo muestra dos botones, de los cuales solo el segundo funciona:

public class Test_GoogleWeb_JSNI_01 implements EntryPoint {

public void onModuleLoad() {

    Button fooButton = new Button("Foo!");
    fooButton.addClickHandler(new ClickHandler(){
        public void onClick(ClickEvent event) {
            fooRunner();
        };
    });


    HTML fooButtonNative = new HTML();
    fooButtonNative.setHTML("<input type='button' value='Foo Native' onclick='foo()'>");

    RootPanel rootPanel = RootPanel.get();
    rootPanel.add(fooButton);
    rootPanel.add(fooButtonNative);

}

public static native void fooRunner() /*-{
  foo();
}-*/;
}

Se dice en el manual, que las funciones nativas implementadas dentro del marco anidado, lo que explica la situación. ¿Pero cómo ejecutar funciones JS entonces?

UPDATE 1 Los siguientes trabajos.

Java

public static native void fooRunner() /*-{
  $doc.fooRunner();
}-*/;

JS:

<script type="text/javascript" language="javascript">
    document.fooRunner = function foo() {
        alert('Foo!');
    }
</script>

¿Hay una mejor manera?

Respuestas a la pregunta(2)

Su respuesta a la pregunta