Подтвердить что ты не робот

Какая разница между встроенной версией Rhino и Rhino для Java 6 прямо из Mozilla?

Я знаю, что API очень разные, но есть ли какая-либо функциональная разница между встроенным материалом JavaScript и сборками Rhino, доступными из Mozilla?

4b9b3361

Ответ 1

Я не уверен, что вы имели в виду API. Java 6 имеет механизм сценариев, в котором одним из доступных движков является Rhino, обозначаемый "js". Таким образом, единственная разница между включенным Mozilla Rhino ECMAScript и тем, который вы можете получить с их сайта, будет отличаться от версий. Я считаю, что в комплекте версия Mozilla Rhino ECMAScript составляет 1,6 оборота2.

Это похоже на работу библиотек XML. Существует "движок", который имеет реализацию по умолчанию.

Пример использования клиента

                       ==========
                       | Client |
                       ==========   
                           |
             ===============================
             |                             |
 =========================           =============
 | Java Scripting Engine |           | Rhino API |
 =========================           =============
             |
      ==================
      |                |
 =============   =============    
 | Rhino API |   | Other API |
 =============   =============

Обновление

Просто, чтобы ответить на ваш вопрос немного больше, да, Java Scripting Engine позаботится о контекстах и ​​других операциях настройки, которые вам нужно сделать вручную, если вы используете Rhino напрямую. Вот пример использования этих двух. Имейте в виду, что когда вы используете Java6 Scripting Engine, подобные вещи происходят под капотом. ScriptingEngine, используемый здесь, не должен поддерживаться Rhino. Он может иметь пользовательскую реализацию сценариев.

public class Main {

    static class Shell extends ScriptableObject {

        @Override
        public String getClassName() {
            return "global";
        }

        public static void print(Context cx, Scriptable thisObj, Object[] args, Function funObj) {
            for (int i = 0; i < args.length; i++) {
                String s = Context.toString(args[i]);
                System.out.print(s);
            }
        }
    }

    public static void useJava6ScriptingEngine() throws Exception {
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
        jsEngine.eval("print('Hello, world!')");
    }

    public static void useRhinoDirectly() throws Exception {
        Context context = Context.enter();
        try {
            Shell shell = new Shell();
            String[] names = {"print"};
            shell.defineFunctionProperties(names, Shell.class, ScriptableObject.DONTENUM);
            Scriptable scope = context.initStandardObjects(shell);
            context.evaluateString(scope, "print('Hello, world!')", null, 0, null);
        } finally {
            Context.exit();
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        useJava6ScriptingEngine();
        useRhinoDirectly();
    }
}