コード例 #1
0
  public NashornProcessor(File documentRoot, String documentPath)
      throws ScriptException, IOException, SAXException {
    // The document root must be a valid directory
    assert (documentRoot.isDirectory());

    // The document root is needed for evaluating script files that are
    // marked with absolute path in the src attribute
    this.documentRoot = documentRoot;

    // Let's see if we could find the document that has been inferred
    File file = new File(documentRoot, documentPath);

    // Keep the parent of this file for relative path based file access
    basePath = file.getParentFile();
    document = HTMLDocument.parse(new FileInputStream(file));

    ScriptEngine e = new ScriptEngineManager().getEngineByName("nashorn");
    assert (e instanceof NashornScriptEngine);
    engine = (NashornScriptEngine) e;

    // TODO get base href and implement set basePath and use it accordingly
    // The basePath can also have full URL which makes it tricky
    // HTMLElement[] scriptElements = document.getElementsByTagName("base");

    HTMLElement[] parts = {document.getHead(), document.getBody()};
    CompiledScript[][] res = new CompiledScript[2][];

    for (int i = 0; i < parts.length; ++i) {

      HTMLElement[] scriptElements = parts[i].getElementsByTagName("script");
      res[i] = new CompiledScript[scriptElements.length];

      int idx = 0;
      for (HTMLElement scriptElement : scriptElements) {
        // if the element has a src tag then we work on a file otherwise, we
        // expect either a CDATA section or a TEXT section within the
        // script element
        String scriptFile = scriptElement.getAttribute("src");
        CompiledScript script;
        if (scriptFile == null) {
          script = loadTextScript(scriptElement);
        } else {
          script = loadFileScript(scriptFile);
        }
        res[i][idx++] = script;
      }
    }

    headScripts = res[0];
    bodyScripts = res[1];
  }
コード例 #2
0
 /**
  * Create a context for executing the script with its own scope
  *
  * @return A run time context for javascript code
  */
 public Context createContext() {
   return new Context(this, document.cloneDocument());
 }