我正在尝试修剪我的一个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>;
}
答案 0 :(得分:10)
确保您的历史记录组件已禁用输出。即:
<cfcomponent output=false >
然后确保CFC 中的getBackUrl函数(以及其他所有函数)都设置了output=false
。
此外,不要忘记对变量使用JsStringFormat ,以确保其被适当转义:
<cfoutput>"#JsStringFormat( Session.history.getBackUrl() )#"</cfoutput>
否则,如果URL恰好包含"
,则可能存在JavaScript注入的风险,或者只是JS错误。
答案 1 :(得分:1)
我已经测试了你当前的代码,它对我来说运行正常,我怀疑你的CFC可能会更多地返回你认为,我显然无法复制。我个人总是会确保组件返回“干净”的结果,而不是在事后删除垃圾字符:)
过去我遇到过类似的问题,而且cfoutput一直都是这样,从来没有深入到底。作为一个起点,我会以这种方式重写,看看它是否有所作为......
<cfset variables.stWindowLocation = '"' & Trim(Session.history.getBackUrl()) & '"'>
<cfoutput>
function back() {
window.location = #variables.stWindowLocation#;}
</cfoutput>