0

我正在尝试修剪由我的 Coldfusion 组件之一返回的字符串,但是无论我做什么 Coldfusion 在字符串的开头添加换行符,没有任何原因导致我的 Javascript 出错。你知道这段代码有什么问题吗?

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>;
    }
4

2 回答 2

10

确保您的历史组件已禁用输出。IE:

 <cfcomponent output=false >

然后确保 CFC 中的 getBackUrl 函数(以及所有其他函数)output=false设置。

另外,不要忘记在变量上使用JsStringFormat,以确保它被适当地转义:

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

否则,如果 URL 恰好包含".

于 2012-08-22T11:50:09.057 回答
1

我已经测试了你当前的代码,它对我来说很好,我怀疑你的 CFC 可能会返回比你想象的更多,我显然无法复制。我个人会始终确保组件返回“干净”的结果,而不是事后删除垃圾字符:)

过去我也遇到过类似的问题,但结果总是与 cfoutput 相关,但从未深究。作为一个起点,我会以这种方式重写,看看它是否有所作为......

<cfset variables.stWindowLocation = '"' & Trim(Session.history.getBackUrl()) & '"'> 
<cfoutput>    
  function back() {            
    window.location = #variables.stWindowLocation#;}
</cfoutput>
于 2012-08-22T08:58:17.933 回答