Because GWT code runs in an iframe, JsPackage.GLOBAL maps to the JSNI $wnd equivalent referencing the parent window so anything referenced from JsInterop needs to be recorded as a window property; and classes aren't recorded on the window per ECMAScript (see https://stackoverflow.com/a/37711826/116472), this is why you need to do it explicitly to expose them to JsInterop.
On Friday, February 24, 2023 at 10:41:17 PM UTC+1 geoj...@gmail.com wrote: > I am attempting to use a javascript class in GWT. Here is the sample code > I am using. > > Javascript file - rhombus.js > > class Rhombus { > static isReady() { > return true; > } > } > > > Java file - Rhombus.java > > package com.xyz.graphics; > > import jsinterop.annotations.JsPackage; > import jsinterop.annotations.JsType; > > @JsType(isNative = true, namespace = JsPackage.GLOBAL) > public class Rhombus { > public static native boolean isReady(); > } > > > index.html > <script src="js/rhombus.js"></script> > <script src="app/app.nocache.js"></script> > > When I try to access Rhombus.isReady(), I get > (TypeError) : Cannot read properties of undefined (reading 'isReady') > > However I can access the method correctly if I attach Rhombus to the > window object. > > <script type="text/javascript"> > window.Rhombus = Rhombus; > </script> > > I don't understand why attaching the class to the window object is > necessary, as none of the documentation makes a mention of that. > -- 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 google-web-toolkit+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit/ca306035-2e34-403e-aec1-8817d67a718an%40googlegroups.com.