2014-12-30 2 views
2

У меня есть этот файл сценария создается с помощью phantomjsКак включить JavaScript файл в программе Java

var webPage = require('webpage'); 
var page = webPage.create(); 

page.open(URL, function (status) { 
    var content = page.content; 
    console.log('Content: ' + content); 
    phantom.exit(); 
}); 

теперь я хочу использовать этот скрипт в программе Java, но я не могу. Я делаю это в моем проекте

ScriptEngineManager s = new ScriptEngineManager(); 
ScriptEngine se = s.getEngineByName("JavaScript"); 
se.eval(new FileReader("myScript.js")); 

но `это результат

Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "require" is not defined. (<Unknown source>#1) in <Unknown source> at line number 1 
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:224) 
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:249) 
at provaJavaScript.Client.main(Client.java:15) 
Caused by: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "require" is not defined. (<Unknown source>#1) 
at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3770) 
at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3748) 
at sun.org.mozilla.javascript.internal.ScriptRuntime.notFoundError(ScriptRuntime.java:3833) 
at sun.org.mozilla.javascript.internal.ScriptRuntime.getNameFunctionAndThis(ScriptRuntime.java:2218) 
at sun.org.mozilla.javascript.internal.Interpreter.interpretLoop(Interpreter.java:1510) 
at sun.org.mozilla.javascript.internal.Interpreter.interpret(Interpreter.java:849) 
at sun.org.mozilla.javascript.internal.InterpretedFunction.call(InterpretedFunction.java:162) 
at sun.org.mozilla.javascript.internal.ContextFactory.doTopCall(ContextFactory.java:430) 
at com.sun.script.javascript.RhinoScriptEngine$1.superDoTopCall(RhinoScriptEngine.java:116) 
at com.sun.script.javascript.RhinoScriptEngine$1.doTopCall(RhinoScriptEngine.java:109) 
at sun.org.mozilla.javascript.internal.ScriptRuntime.doTopCall(ScriptRuntime.java:3160) 
at sun.org.mozilla.javascript.internal.InterpretedFunction.exec(InterpretedFunction.java:173) 
at sun.org.mozilla.javascript.internal.Context.evaluateReader(Context.java:1169) 
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:214) 
... 2 more 

Как я могу сделать?

редактировать: я ставлю эту строку в мой код:

Process process = Runtime.getRuntime().exec("/usr/bin/phantomjs myScript.js"); 

, но это не работает. Прогма возвращает те же ошибки, что и раньше. что я могу сделать ??

ответ

1

Требование не является частью стандартного javascript, а является функцией NodeJS. Ваша JAVA-программа не знает, как с этим справиться.

Смотрите также этот вопрос и его принятый ответ:

What is this Javascript "require"?

1

скриптовый движок не имеет доступа к объектам (require) добавлен в JavaScript по PhantomJS/nodejs

Вы можете выполнить фантом с помощью exec. Что-то вроде

// You need the correct path for phantomJs 
Process process = Runtime.getRuntime().exec("/usr/bin/phantomjs myScript.js"); 

Смотреть https://stackoverflow.com/a/16891381/227299

Смежные вопросы