Problem with interoperability with JavaFX WebEngine (original) (raw)

Jim Laskey (Oracle) james.laskey at oracle.com
Fri Mar 27 12:16:43 UTC 2015


David,

At issue is the fact that WebEngine JS objects come from WebJS (not Nashorn) and are really Java objects from Nashorn's perspective (including undefined.) In order for them to be treated like Nashorn JavaScript objects you need to wrap these objects in something like a JSAdaptor. See https://blogs.oracle.com/nashorn/entry/porting_from_the_browser_to for starting points.

Cheers,

-- Jim

On Mar 27, 2015, at 8:11 AM, David P. Caldwell <david at code.davidpcaldwell.com> wrote:

So it's very cool, and unexpected, that JavaScript objects obtained from a JavaFX WebEngine show up as something like ordinary Nashorn objects in Nashorn scripts. That's an unexpected bonus (I was planning on using .setMember() and all that stuff from netscape.javascript.JSObject). The objects behave a bit strangely, though. So I've got a couple of bug reports, I guess. Here's a script that demonstrates the ones I've found so far: var WebEngine = Java.type("javafx.scene.web.WebEngine"); var engine = new WebEngine(); var window = engine.executeScript("window"); print("foo = " + window.foo); print("typeof(window.foo) = " + typeof(window.foo)); if (window.foo) { print("window.foo is truthy"); } Output: $ /usr/lib/jvm/jdk1.8.040/bin/jjs -fx nashorn.js foo = undefined typeof(window.foo) = string window.foo is truthy I actually am using a much more complicated embedding that is done from Java, so I can tell you the problem is not in the implementation of the -fx flag. Other than that, I can't see much; I haven't delved into the Nashorn code, let alone whatever magic enables this. -- David.



More information about the nashorn-dev mailing list