Java, nashorn, access to another js file

Is it possible to enable one js from another with java nashorn engine?

ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn"); InputStreamReader rs = new InputStreamReader(new FileInputStream(new File(.../script.js)); engine.eval(rs); 

script.js

 var System = Java.type('java.lang.System'); // document.write("./test.js"); - javax.script.ScriptException: ReferenceError: "document" is not defined // require('./test.js'); - require is not defined 

test.js

 System.out.println("reading test.js file"); 

I want to create a top level script (in this example its script.js) and use it as a library for other scripts in the same directory.

+8
java javascript scope nashorn
source share
2 answers

you can use the nashorn load() function

https://wiki.openjdk.java.net/display/Nashorn/Nashorn+extensions

 // can load script from files, URLs load("foo.js"); // loads script from file "foo.js" from current directory load("http://www.example.com/t.js"); // loads script file from given URL // loads script from an object properties. // Object should have "script" and "name" properties. // "script" property contains string code of the script. // "name" property specifies name to be used while reporting errors from script // This is almost like the standard "eval" except that it associates a name with // the script string for debugging purpose. load({ script: "print('hello')", name: "myscript.js"}) // load can also load from pseudo URLs like "nashorn:", "fx:". "nashorn:" pseudo URL scheme // for nashorn built-in scripts. "fx:" pseudo URL scheme for JavaFX support scripts // load nashorn parser support script - defines 'parse' // function in global scope load("nashorn:parser.js"); // load Mozilla compatibility script - which defines global functions // like importPackage, importClass for rhino compatibility. load("nashorn:mozilla_compat.js"); 
+13
source share

Nashorn is brilliant.

And it comes with a built-in download method !!!

load can accept a URL so you can use the excellent JavaScript libraries on CDNJS

if you use nudge4j , you can get kangax html minifier is executed like this:

 load('https://cdnjs.cloudflare.com/ajax/libs/html-minifier/3.3.3/htmlminifier.js') minify = require('html-minifier').minify; input = '<div> <p> foo </p> </div>'; output = minify(input, { collapseWhitespace: true }); 
0
source share

All Articles