2013-07-23 17 views
1

我有一個基於Java的應用程序讀取文件並在基於代碼鏡像的編輯器中顯示該文件。 java代碼讀取用戶選擇的文件並將其轉換爲字符串。然後該字符串使用'editor.setvalue'傳遞給編輯器。問題是任何硬編碼的字符串都顯示正常。但如果它是從文件讀取,然後我得到一個錯誤使用setvalue使用Java在基於codemirror的編輯器中加載文件時出現的JSException

Caused by: netscape.javascript.JSException: SyntaxError: Unexpected EOF 

我能夠正確打印文件,沒有問題。

這是我正在嘗試在java中做什麼。

String sb = FileUtils.readFileToString(file); 
webengine.executeScript("editor.setValue('" + sb + "');"); 

「webengine.executescript」是一種javafx方法,用於調用可在web引擎中呈現的html可見的javascript函數。

我的代碼鏡子代碼。

<form> 
    <textarea id="code" name="code"> 
    </textarea> 
</form> 
<script> 
    var editor = CodeMirror.fromTextArea(document.getElementById("code"), { 
     lineNumbers : true, 
     matchBrackets : true, 
     mode : "text/x-java", 
     theme : "theme_value", 
     indentUnit : 4, 
     gutter: true 
    }); 
</script> 

我無法理解哪些所有字符導致此問題。 我嘗試使用「+」運算符添加兩個字符串,並顯示添加的字符串。但是,當我在字符串之間插入換行符「\ n」時,我開始得到相同的錯誤。我嘗試用
替換換行符,但沒有太多幫助,因爲它們顯示爲不破壞行。

回答

6

問題是,當調用executeScript時,如果在給定的Javascript方法中傳入的字符串中包含任何換行符或單引號,則會導致語法錯誤。

快速修復:

content = content.replace("'", "\\'"); 
    content = content.replace(System.getProperty("line.separator"), "\\n"); 
    content = content.replace("\n", "\\n"); 
    content = content.replace("\r", "\\n"); 

這樣的換行和單引號將在JavaScript方法被保留。

相關問題