java javascript scope nashorn

Java, nashorn accediendo a otro archivo js



javascript scope (2)

¿Es posible incluir un js de otro con el motor java nashorn?

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");

Quiero crear un script de nivel superior (en este ejemplo, script.js) y usarlo como una biblioteca para otros scripts en el mismo directorio.


puedes usar la función load() Nashorn

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''s 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''s built-in scripts. "fx:" pseudo URL scheme for JavaFX support scripts // load nashorn''s 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");


Nashorn es brillante.

¡Y viene con el método de carga incorporado !

load puede tomar una URL para que pueda explotar geniales bibliotecas de JavaScript en el CDNJS

si usas nudge4j puedes hacer que el minificador html de kangax se ejecute así:

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 });