-Rhino

sugaさんが気にしているRhinoですが、長く導入考えてはいて今に至ってます。TestCaseベースにてRhinoをembeddedするのは試していて、かなり簡単。Cで書かれた歴史的JSエンジンであるSpiderMonkeyと思想が近いので、私は過去の経験が生きています。
Codeletは手当てだけやっておこうかなと。ピュアなHTMLから離れますが、.mayaでもかけるように仕様設計して、ひとつの解決をしたいと思います。が、仕様が煮詰めてません>sugaさん。気になる今こそ、考えてこ〜。

  public void testSimpleJS() {
    Context cx = Context.enter();
    Scriptable scope = cx.initStandardObjects();
    String s = "obj = { run: function() { return 'hi'; } }; obj.run();";
    Object result = cx.evaluateString(scope, s, "maya.html", 1, null);
    assertEquals("hi", Context.toString(result));
    Context.exit();
  }
  
  public void testJavaObject() {
    Context cx = Context.enter();
    Scriptable scope = cx.initStandardObjects();
    String s = "out.println('hello')";
    Object obj = Context.javaToJS(System.out, scope);
    ScriptableObject.putProperty(scope, "out", obj);
    cx.evaluateString(scope, s, "maya.html", 1, null);
    Context.exit();
  }

  public void testUsingJsVar() {
    Context cx = Context.enter();
    Scriptable scope = cx.initStandardObjects();
    String s = "x = 'hello'";
    cx.evaluateString(scope, s, "maya.html", 1, null);
    Object x = scope.get("x", scope);
    assertEquals("hello", Context.toString(x));
    Context.exit();
  }

ちなみに、Rhinoのチュートリアル見て書いたTestCaseベースのコード例。