2012-08-22 25 views
0

我想修剪由我的一個Coldfusion組件返回的字符串,但無論我做什麼Coldfusion在字符串的開始添加換行沒有任何原因導致我的Javascript中的錯誤。你知道這段代碼有什麼問題嗎?修剪不工作在Coldfusion 8.0

function back(){    
     window.location = <cfoutput>"#Trim(Session.history.getBackUrl())#"</cfoutput>; 
} 

上面的代碼生成HTML以下和平:

function back(){ 
     window.location = " 

      http://dummy_server_address/index.cfm?TargetUrl=disp_main"; 
} 

望着這裏ColdFusion的規格在裝飾定義: 一個字符串參數的副本,刪除首尾空格後控制字符。

所以它應該完成這項工作!因此,我想知道如何做到這一點,我不想使用替換或類似的功能。

編輯:非常奇怪,這是工作......但我不喜歡這個解決方案,所以如果你有任何其他的想法,或至少對這種行爲的解釋。

<cfset backUrl = Session.history.getBackUrl()> 
    function back(){    
      window.location = <cfoutput>"#backUrl#"</cfoutput>; 
    } 
+0

爲什麼不從函數本身返回Session.history.getBackUrl()函數中的字符串時使用Trim()? – Lucas

+6

爲getBackUrl函數嘗試'output = false'。 – Sergii

+0

要添加到上面的「Sergii」的評論 - 確保你的'showdebugoutput =「false」'和'enablecfoutputonly =「true」' –

回答

10

確保您的歷史組件禁用輸出。即:

<cfcomponent output=false > 

然後確保getBackUrl功能(和所有其他功能)在CFC output=false集。

此外,不要忘了對變量使用JsStringFormat,以確保它適當地轉義:

<cfoutput>"#JsStringFormat(Session.history.getBackUrl())#"</cfoutput> 

否則,有一個爲JavaScript注入,或者只是JS錯誤的潛在危險,如果URL恰好包含"

+1

+1不懶惰:) – Sergii

1

我測試過你當前的代碼和它的作品對我很好,我懷疑你的CFC可能會返回更多的那麼您認爲,這顯然我不能重複。我個人總是確保該組件返回'乾淨'的結果,而不是在事後刪除垃圾字符:)

我在過去曾經有過類似的問題,而且它總是使用cfoutput,從來沒有去過它的底部。作爲一個起點,我會重寫這種方式,看看它是否有所作爲...

<cfset variables.stWindowLocation = '"' & Trim(Session.history.getBackUrl()) & '"'> 
<cfoutput>  
    function back() {    
    window.location = #variables.stWindowLocation#;} 
</cfoutput>