2

複雑な生成された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サーブレットで、上記の2行を次と同等のものに変換します。

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

このJavascriptファイルを解析して再配置するための私の最良のオプションは何ですか?Rhinoを調べる必要がありますか?これら(および$ doc.writeを使用して記述されているネストされたJavascript)にハンドルを与えることができますか?任意のアイデアをいただければ幸いです。

4

4 に答える 4

1

JavaでRegExを使用できますが、通常の文字列検索関数を使用して、新しいStringBuilderオブジェクトでJavaScriptコードを再構築することをお勧めします。

于 2011-01-18T19:57:50.293 に答える
1

おそらく、よりエレガントでブルートフォースの少ないオプションは、iframeリンカーを変更して必要なものを変更することです。または、ローダーがわかりにくくなる前に、セカンダリリンカーを作成して行を変更できると思います。リンカーは私がまだ遊んでいないことの1つですが、リンカーはおそらくあなたがやりたいことをするのに最適な場所であることを私は知っています。

于 2011-01-19T00:50:22.897 に答える
1

-style PRETTYをGWTコンパイラーに追加して、難読化されていないJavaScriptを取得できます。

RhinoでJavaScriptを評価するには、document、windowなどのブラウザー固有のオブジェクトを提供する必要があります...いずれの場合も、document.writeはすべてをかなり複雑にします。

提供されているECMAScript文法を使用してANTLRv3でJavaScriptを解析することもできますが、これが役立つかどうかはわかりません。

于 2011-01-18T07:30:01.007 に答える
1

あなたがする必要のある変換は非常に具体的であるため、私が見ることができる最も簡単な解決策は、jsを言語として扱うのではなく、純粋なテキストとして扱うことです。

+で分割してから、関連する配列値を取得できます。

于 2011-01-18T07:53:51.710 に答える