Управление Javascript с помощью Java - PullRequest
2 голосов
/ 18 января 2011

У меня есть сложный сгенерированный файл 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, преобразоватьвыше две строки в эквиваленте:

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

Какие мои лучшие варианты для анализа и реорганизации этого файла Javascript?Должен ли я взглянуть на Rhino, сможет ли он дать указатели на них (а также на вложенный Javascript, который пишется с использованием $ doc.write)?Любые идеи будут оценены.

Ответы [ 4 ]

1 голос
/ 19 января 2011

Возможно, более элегантным и менее грубым методом было бы изменить компоновщик iframe, чтобы изменить то, что вам нужно, или я думаю, вы можете создать вторичный компоновщик и изменить строки до того, как загрузчик запутается. Линкеры - это то, с чем мне еще предстоит поиграть, но я знаю, что они, вероятно, являются лучшим местом для того, что вы хотите делать.

1 голос
/ 18 января 2011

Поскольку преобразование, которое вам нужно сделать, настолько специфично, самое простое решение, которое я вижу, - это работать с js как с чистым текстом, а не с языком.

Вы можете разделить на + и затем получить значения массивов, которые имеют отношение.

1 голос
/ 18 января 2011

Вы можете использовать RegEx в Java, но я бы рекомендовал использовать обычные функции поиска String и перестроить код JavaScript в новом объекте StringBuilder.

1 голос
/ 18 января 2011

Вы можете добавить -style PRETTY к компилятору GWT, чтобы получить беспристрастный JavaScript.

Чтобы оценить ваш JavaScript с помощью Rhino, вам нужно будет предоставить определенные объекты браузера, такие как документ, окно, ... В любом случае, document.write все усложняет.

Вы также можете анализировать JavaScript с помощью ANTLRv3 с помощью предоставленной грамматики ECMAScript, но я не уверен, поможет ли это вам.

...