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

时间:2008-09-18 17:16:48

标签: java javascript javax.script

假设我有一些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字符串吗?

2 个答案:

答案 0 :(得分:2)

好像你在问:

  

如何让ScriptEngine评估网址而不只是字符串?

这是准确的吗?

ScriptEngine没有提供下载和评估网址内容的工具,但这很容易做到。 ScriptEngine允许您传入将用于阅读脚本的Reader对象。

尝试这样的事情:

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

答案 1 :(得分:0)

您是否尝试从java 1.6 applet访问浏览器页面中的javascript对象?如果是这样,你就会以错误的方式解决这个问题。这不是脚本引擎的用途。它用于在jvm中运行javascript,而不是用于在浏览器中访问javascript的applet。

这里有blog entry,可能会让你到达某个地方,但看起来并没有太大的支持。