对带有外部src属性的javascript使用javax.script包

时间:2020-03-06 14:22:25  来源:igfitidea点击:

说我有一些JavaScript,如果在浏览器中运行,将像这样输入...

<script type="text/javascript"
    src="http://someplace.net/stuff.ashx"></script>

<script type="text/javascript">
   var stuff = null;
   stuff = new TheStuff('myStuff');
</script>

...并且我想使用Java 1.6中的javax.script包在jvm(而不是applet)中运行此代码并获取相关内容。如何让引擎知道要在远程.ashx文件中找到要构造的类的源?

例如,我知道将Java代码编写为...

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");

engine.eval( "stuff = new TheStuff('myStuff');" );
Object    obj = engine.get("stuff");

...但是默认情况下," JavaScript"引擎对TheStuff类一无所知,因为该信息位于远程.ashx文件中。我可以看看上面的src字符串吗?

解决方案

似乎我们在问:

How can I get ScriptEngine to evaluate the contents of a URL instead of just a string?

准确吗?

ScriptEngine没有提供用于下载和评估URL内容的功能,但是很容易做到。 ScriptEngine允许我们传入一个Reader对象,该对象将用于读取脚本。

尝试这样的事情:

URL url = new URL( "http://someplace.net/stuff.ashx" );
InputStreamReader reader = new InputStreamReader( url.openStream() );
engine.eval( reader );

我们是否要从Java 1.6小程序访问浏览器页面中的javascript对象?如果是这样,我们将以错误的方式进行操作。那不是脚本引擎的目的。它用于在jvm中运行javascript,而不是用于applet从浏览器中访问javascript。

这是一个博客条目,可能会带我们到某个地方,但是看起来并没有太多支持。