Rémi, Edmond and RJ are correct. Your script is failing because of the lack of DOM (DOM is a browser library), otherwise yes Nashorn supports 3rd party Javascript (and Java.)
All, I've been looking for members of the community to implement Nashorn/DOM so that people can use existing browser libraries on top of JavaFX. With JavaFX, rendering performance would figuratively smoke existing browsers. The effort would involve taking a library like env.js and adding the guts. I can help coordinate the activity, but I don't have the cycles to do the work myself. Cheers, - Jim On Apr 18, 2014, at 7:24 AM, Edmond Kemokai <[email protected]> wrote: > I don't see how what you are trying to do could work. You are executing the > jquery script in a context that lacks the key variables such as document > which jquery relies on. JQuery is for DOM manipulation primarily, as your > error source indicates, there's no document for jquery to act on. > > > > > On Fri, Apr 18, 2014 at 4:24 AM, Rémi Barraquand > <[email protected]>wrote: > >> Hi all, >> >> I might not be the first person to ask such question but I didn't found >> that much information regarding my issue on the official Nashorn page. >> >> *Context*: In an open-source project I'm working on, I'm using JavaFx >> WebView to develop a client application written mostly in JavaScript >> (RequireJS, Backbone, JQuery, Handlebars, etc). The application is running >> perfectly. I nevertheless want to add a Command-Line Interface (CLI) to let >> users interact with the application (in my case access a compiler written >> in JS) from their terminal without having to open a windowed interface >> (GUI). I therefore want to execute some JS code without the use of the >> JavaFx WebView. As a result I'm trying to make use of Nashorn! >> >> *Problem*: The code I'm trying to execute in the Nashorn script engine is >> using third party libraries such as Backbone Models and JQuery for the >> generation and manipulation of HTML (I do not need to render anything, just >> to generate HTML). I therefore tried to load JQuery library within Nashorn >> but I got a strange error... >> >> The code: >> >> |> ScriptEngine engine = manager.getEngineByName("nashorn"); >> >>> engine.eval(new InputStreamReader(CLI.class.getResourceAsStream("/io/ >>> dahuapp/core/scripts/jquery.js"))); >>> >> | >> >> The error: >> >> |--- ERROR --- >> Exception in thread "main" javax.script.ScriptException: TypeError: >> Cannot read property "defaultView" from undefined in<eval> at line number >> 1010 >> at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException( >> NashornScriptEngine.java:564) >> at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl( >> NashornScriptEngine.java:548) >> at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl( >> NashornScriptEngine.java:528) >> at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl( >> NashornScriptEngine.java:524) >> at jdk.nashorn.api.scripting.NashornScriptEngine.eval( >> NashornScriptEngine.java:189) >> at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:249) >> at io.dahuapp.cli.CLI.main(CLI.java:45) >> Caused by:<eval>:1010 TypeError: Cannot read property "defaultView" from >> undefined >> at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:56) >> at jdk.nashorn.internal.runtime.ECMAErrors.typeError( >> ECMAErrors.java:212) >> at jdk.nashorn.internal.runtime.ECMAErrors.typeError( >> ECMAErrors.java:184) >> at jdk.nashorn.internal.runtime.ECMAErrors.typeError( >> ECMAErrors.java:171) >> at jdk.nashorn.internal.runtime.Undefined.lookupTypeError( >> Undefined.java:128) >> at jdk.nashorn.internal.runtime.Undefined.lookup(Undefined.java:113) >> at jdk.nashorn.internal.runtime.linker.NashornLinker. >> getGuardedInvocation(NashornLinker.java:98) >> at jdk.internal.dynalink.support.CompositeTypeBasedGuardingDyna >> micLinker.getGuardedInvocation(CompositeTypeBasedGuardingDyna >> micLinker.java:176) >> at jdk.internal.dynalink.support.CompositeGuardingDynamicLinker >> .getGuardedInvocation(CompositeGuardingDynamicLinker.java:124) >> at jdk.internal.dynalink.support.LinkerServicesImpl. >> getGuardedInvocation(LinkerServicesImpl.java:144) >> at jdk.internal.dynalink.DynamicLinker.relink(DynamicLinker.java:232) >> at jdk.nashorn.internal.scripts.Script$\^eval\_$4._L38$_L563$_ >> L1007(<eval>:1010) >> at jdk.nashorn.internal.scripts.Script$\^eval\_$4.scopeCall- >> 14(<eval>) >> at jdk.nashorn.internal.scripts.Script$\^eval\_$4._L38$_L563(< >> eval>:2503) >> at jdk.nashorn.internal.scripts.Script$\^eval\_$2.$split(< >> eval>:563) >> at jdk.nashorn.internal.scripts. >> Script$\^eval\_._L38(<eval>) >> at jdk.nashorn.internal.scripts. >> Script$\^eval\_._L15(<eval>:34) >> at jdk.nashorn.internal.scripts. >> Script$\^eval\_.runScript(<eval>:15) >> at jdk.nashorn.internal.runtime. >> ScriptFunctionData.invoke(ScriptFunctionData.java:498) >> at jdk.nashorn.internal.runtime. >> ScriptFunction.invoke(ScriptFunction.java:206) >> at jdk.nashorn.internal.runtime. >> ScriptRuntime.apply(ScriptRuntime.java:378) >> at jdk.nashorn.api.scripting. >> NashornScriptEngine.evalImpl(NashornScriptEngine.java:546) >> ... 5 more >> --- END ERROR --- >> | >> >> I tracked the error down in the JQuery code and the error is coming from >> the block: >> >> |setDocument = Sizzle.setDocument = function( node ) { >> var hasCompare, >> doc = node ? node.ownerDocument || node : preferredDoc, >> **parent = doc.defaultView;** // *ERROR* >> >> // If no document and documentElement is available, return >> if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { >> return document; >> } >> >> .... >> | >> >> *Question*: >> >> 1. is it possible to load any third party library within Nashorn ? >> 2. does someone tried to load JQuery inside Nashorn ? >> 3. does someone have an idea from where this error might come from? >> >> Thanks, >> Rémi >> >> -- >> Rémi Barraquand, Phd >> VP of Engineering at Carnot-LSI >> http://remibarraquand.com >> >> >> > > > -- > “talk trash and carry a small stick.” > PAUL KRUGMAN (NYT) > > "I believe god invented man, because he was disappointed in the monkey" > Mark Twain > > "Beware of geeks bearing formulas" > Warren Buffett
