11177


JAVA標準の機能を使って、  
外部サイトに存在する、JS外部ファイル内に定義されている関数を実行することはできるのでしょうか？

たとえばあるサイトが、遷移先URLをブラウザ内でダイナミックに生成していて、HTMLからはその生成方法を知ることができないとき、HTTPのresponseを監視するなんて方法もあるのかもしれませんが、普通にこちらのサーバーサイドで相手WEBサーバーのjavascriptを実行して算出できたら楽だなと思いました。

ScriptEngineではJavaScript標準コマンドは実行できるようですが、外部関数を取り込めるような説明がなかったので、もしそういうものがあればおしえていただけますでしょうか。


CC BY-SA 3.0
2015-06-09T06:43:45.393
11165
2015-06-09T09:33:18.403
8396
question
javascript java apache
【JAVA】ScriptEngine等を使って、外部サイトのJS関数を実行する


外部ファイルを`ScriptEngine#eval(Reader)`で読み込んだり、`engine.eval("load('./hello.js');");`みたいに`load`する方法があるようです。

**NashornLoadTest.java**  

[code]

    import java.io.*;
    import javax.script.*;
    
    public class NashornLoadTest {
      public static void main(String... args) throws Exception {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("javascript");
        //try (Reader reader = new BufferedReader(new InputStreamReader(url.openStream()))) {
        try (Reader reader = new BufferedReader(new InputStreamReader(
                             new FileInputStream("hello.js"), "UTF-8"))) {
          engine.eval(reader);
        }
        //or engine.eval("load('./hello.js');");
        engine.eval("hello('World!');");
      }
    }
    
[/code]

**hello.js**  

[code]

    function hello(name) {
      java.lang.System.out.println("Hello " + name);
    };
    
[/code]


CC BY-SA 3.0
2015-06-09T09:33:18.403
11177
2015-06-09T09:33:18.403
46
11165
answer