The approach is very simple and easy, you use you detached GWT app like any 
other JS script.
Any GWT app is a JS script.

1st you need to define the interface of the detached module in terms of 
JsInterop: isNative = true.
You can only use Strings, numbers, arrays and isNative = true interfaces. No 
Java types.

@JsType(isNative = true)
public interface Interface {
  @JsMethod Double computeSomething(String arg);
  @JsMethod Disposable fetchData(Consumer<Data> arg);
}

2nd you implement the interface and use Window.* namespace to communicate 
between modules:

  class Exports {
    @JsProperty(namespace = JsPackage.GLOBAL)
    public static native void setInterface(Interface value);
  }
  Exports.setInterface(new Implementation());
 
3rd - use the interface in a main program:

  class Imports {
    @JsProperty(namespace = JsPackage.GLOBAL)
    public static native Interface getInterface();
  }

    Runnable onLoad = () -> {
      Interface i = Imports.getInterface();
      i2.computeSomething("test1");
    };

    Runnable onError = () ->{
      JsGlobals.getWindow().getConsole().log("onError");
    };

    ModuleLoader.loadModule(
        "jsExport/jsExport.nocache.js",
        progressBar,
        onLoad,
        onError
    );

Where ModuleLoader loads the script via script element: 

    Document document = JsGlobals.getDocument();
    HTMLScriptElement scriptElement = document.createScriptElement();
    scriptElement.setSrc(name);
    scriptElement.setOnerror(event -> onError.run());
    scriptElement.setOnload(new State()::schedule);

    document.getHead().appendChild(scriptElement);


We use timer to understand if the module loading is completed, however other 
ways are possible:

      private Runnable waitForObject = () -> {
        if (isLoaded.apply()) {
          onLoad.run();
        } else {
          schedule();
        }
      };

      private ScheduledCommand timerCallback = () -> waitForObject.run();

      private void schedule() {
        JsGlobals.getWindow().setTimeout(timerCallback, 17);
      }

You may have both modules in a single maven module, but different .gwt.xml 
files.
We unite modules for the module system testing, but not for production. 
In production we have two separate maven modules.
We use single permutation for all browsers (for Chrome) and we don`t have any 
issues with other browsers.

<module rename-to="jsImport"> 
  <entry-point class='jsExport.JsImportTest'/>
  <source path="jsExport"/>
</module>

<module rename-to="jsExport">
  <entry-point class='jsExport.JsExportTest'/>
  <source path="jsExport"/>
</module>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to