2016-07-06 2 views
2

クロージャコンパイラを大きなJavaアプリケーションに統合したいと考えています。クロージャコンパイラを<x3cと置き換えます

私は問題があります。閉鎖コンパイラは、私がコンパイルしようとしている\x3e

スクリプトと\x3c<>置き換え、私は閉鎖コンパイラをテストするとき

$('#something').append($('<div></div>').text('hi')); 

と閉鎖コンパイラはしかし

$("#something").append($("\x3cdiv\x3e\x3c/div\x3e").text("hi")); 

を返すです公式デモウェブサイト:https://closure-compiler.appspot.com/home <と>文字は変更されていません。

無効にするオプションはありますか?

import java.util.ArrayList; 
import java.util.List; 
import java.util.logging.Level; 

import com.google.javascript.jscomp.CheckLevel; 
import com.google.javascript.jscomp.CompilationLevel; 
import com.google.javascript.jscomp.Compiler; 
import com.google.javascript.jscomp.CompilerOptions; 
import com.google.javascript.jscomp.PropertyRenamingPolicy; 
import com.google.javascript.jscomp.SourceFile; 
import com.google.javascript.jscomp.VariableRenamingPolicy; 
import com.google.javascript.jscomp.WarningLevel; 

public class ClosureCompiler { 

    public static void main(String args[]) { 

     String code = "$('#something').append($('<div></div>').text('hi'));"; 
     String outputFilename = "a.txt"; 

     Compiler.setLoggingLevel(Level.OFF); 
     Compiler compiler = new Compiler(); 

     CompilerOptions compilerOptions = new CompilerOptions(); 
     compilerOptions.checkGlobalThisLevel = CheckLevel.OFF; 
     compilerOptions.closurePass = false; 
     compilerOptions.coalesceVariableNames = true; 
     compilerOptions.collapseVariableDeclarations = true; 
     compilerOptions.convertToDottedProperties = true; 
     compilerOptions.deadAssignmentElimination = true; 
     compilerOptions.flowSensitiveInlineVariables = true; 
     compilerOptions.foldConstants = true; 
     compilerOptions.labelRenaming = true; 
     compilerOptions.removeDeadCode = true; 
     compilerOptions.optimizeArgumentsArray = true; 

     compilerOptions.setAssumeClosuresOnlyCaptureReferences(false); 
     compilerOptions.setInlineFunctions(CompilerOptions.Reach.LOCAL_ONLY); 
     compilerOptions.setInlineVariables(CompilerOptions.Reach.LOCAL_ONLY); 
     compilerOptions.setRenamingPolicy(VariableRenamingPolicy.LOCAL, PropertyRenamingPolicy.OFF); 
     compilerOptions.setRemoveUnusedVariables(CompilerOptions.Reach.LOCAL_ONLY); 

     System.out.println(compilerOptions.convertToDottedProperties); 

     CompilationLevel.SIMPLE_OPTIMIZATIONS.setOptionsForCompilationLevel(compilerOptions); 

     WarningLevel.DEFAULT.setOptionsForWarningLevel(compilerOptions); 

     List<SourceFile> primaryJavascriptFiles = new ArrayList<SourceFile>(); 
     primaryJavascriptFiles.add(SourceFile.fromCode(outputFilename, code)); 

     compiler.compile(new ArrayList<SourceFile>(), primaryJavascriptFiles, compilerOptions); 

     System.out.println(compiler.toSource()); 



    } 

} 

おかげで、このオプションはCompilerOptions#setTrustedStringsによって制御される

+0

出力文字セット? https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/CompilerOptions.java#L1674-L1679 –

+0

@ChadKillingsworth nope。私はStandardCharsets.UTF_8を入れて同じです –

+0

これらは同じ文字を表します、なぜそれは問題ですか? – John

答えて

2

は、ここに私のJavaコードです。このデフォルトは "false"ですが、コマンドラインランナーが "true"に設定します。このオプションは、コンパイラが制御されていない入力で「オンザフライ」で使用され、悪質なエージェントがスクリプトタグを挿入してページを制御できる可能性がある場合に便利です。それは、ユーザーデータをjavascriptに注入することです。これが信頼できる文字列を設定していない場合は、OKです。

+0

このオプションは、closure-compiler-npmを使用して設定できますか、それとも強制的にコードスニペットを共有してもかまいませんか?コンパイラが、 '' <! - ko .. - > '' 'を、KnockoutJSを壊すthisと置き換えたときに、HTMLコメントをバインド・ディレクティブとして認識しなくなったので問題があります – ladar

関連する問題