用Java操作Javascript

用Java操作Javascript,java,javascript,gwt,serverside-javascript,Java,Javascript,Gwt,Serverside Javascript,我有一个复杂的、生成的Javascript文件(它是由GWT编译器生成的),我需要能够以编程方式对此文件进行更改,并输出一个“清理”版本的文件。我特别: function bookmark(){ // lots-o-javascript var M=Vb+s+I+Wb;n.write(Xb+Yb+Zb+$b+_b+ac+bc+$b+_b+cc+dc+ec+M+fc+gc+hc+ic) } bookmark(); 未混淆,函数内部看起来像: var compiledScriptT

我有一个复杂的、生成的Javascript文件(它是由GWT编译器生成的),我需要能够以编程方式对此文件进行更改,并输出一个“清理”版本的文件。我特别:

function bookmark(){
    // lots-o-javascript
    var M=Vb+s+I+Wb;n.write(Xb+Yb+Zb+$b+_b+ac+bc+$b+_b+cc+dc+ec+M+fc+gc+hc+ic)
}
bookmark();
未混淆,函数内部看起来像:

var compiledScriptTag = '"<script src=\\"' + base + strongName + '.cache.js\\"><\/scr" + "ipt>"';
$doc_0.write('<scr' + 'ipt><!-' + '-\n' + 'blah blah blah' + 'document.write(' + compiledScriptTag + ');' + '\n-' + '-><\/scr' + 'ipt>');

解析和重新排列此Javascript文件的最佳选项是什么?我应该看看Rhino,它是否能够为这些(以及使用$doc.write编写的嵌套Javascript)提供句柄?如果您有任何想法,我们将不胜感激。

您可以向GWT编译器添加-style-PRETTY,以获得不模糊的JavaScript

要使用Rhino评估JavaScript,您需要提供特定于浏览器的对象,如文档、窗口等。。。无论如何,document.write会让一切变得非常复杂


您也可以使用ANTLRv3和提供的ECMAScript语法解析JavaScript,但我不确定这是否会对您有所帮助。

由于您需要进行的转换非常具体,我所看到的最简单的解决方案是将js作为纯文本处理,而不是将其作为语言处理


您可以在+上拆分,然后获取相关的数组值。

您可以在Java中使用正则表达式,但我建议您使用常规字符串搜索函数,并在新的StringBuilder对象中重建JavaScript代码。

也许更优雅、更少暴力的选项是修改iframe链接器以更改内容您需要,或者我认为您可以创建一个辅助链接器,并在加载程序变得模糊之前更改行。链接器是我尚未使用过的东西,但我知道它们可能是做您想做的事情的最佳场所。

在GWT编译成JavaScript之前,将函数包含到Java代码中不是更容易吗?我想您指的是GWT中的内联本机JS函数?我认为这行不通,这段代码在Javascript加载程序中,而不是在编译后的应用程序中。如果你知道这样做的方法,请让我知道。我考虑过,特别是因为我的目标是文件的最后一部分,但是正则表达式会变得非常疯狂,我正在尝试做一些对漂亮和模糊输出都有效的事情,所以我想解析JS是一种方法…但是你需要正则表达式吗?有时候,字符串拆分要简单得多,而且启动时几乎总是性能更好:)我明白了,这是个不错的主意。我将试一试,看看它是否有效。这将是理想的解决方案,我实际上使用的是跨站点链接器(xs)。我找不到任何关于如何做到这一点的文档/示例。
eval('blah blah blah');
document.body.appendChild(document.createElement('script')).src=base + strongName + ".cache.js";