用Java操作Javascript

时间:2011-01-18 06:42:52

标签: 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 compiledScriptTag = '"<script src=\\"' + base + strongName + '.cache.js\\"><\/scr" + "ipt>"';
$doc_0.write('<scr' + 'ipt><!-' + '-\n' + 'blah blah blah' + 'document.write(' + compiledScriptTag + ');' + '\n-' + '-><\/scr' + 'ipt>');

所以我需要做的是在Java servlet中,将上面的两行转换成等效的:

eval('blah blah blah');
document.body.appendChild(document.createElement('script')).src=base + strongName + ".cache.js";

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

4 个答案:

答案 0 :(得分:1)

您可以将-style PRETTY添加到GWT编译器以获取未经模糊处理的JavaScript。

要使用Rhino评估您的JavaScript,您需要提供特定于浏览器的对象,例如文档,窗口......在任何情况下,document.write都会非常复杂。

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

答案 1 :(得分:1)

由于你需要做的转换是如此具体,我能看到的最简单的解决方案是将js作为纯文本而不是将其视为一种语言。

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

答案 2 :(得分:1)

您可以在Java中使用RegEx,但我建议使用常规字符串搜索功能并在新的StringBuilder对象中重建JavaScript代码。

答案 3 :(得分:1)

也许更优雅,更少暴力的选择是修改iframe链接器来改变你需要的东西,或者我认为你可以创建一个辅助链接器并在加载器被混淆之前改变这些行。连接器是我还没有玩过的东西,但我知道它们可能是你做你想做的最好的地方。