0

Coldfusionコンポーネントの1つから返された文字列をトリミングしようとしていますが、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の仕様を確認すると、トリムの定義がわかります。先頭と末尾のスペースと制御文字を削除した後の文字列パラメーターのコピー。

だからそれは仕事をするべきだった!したがって、それを適切に行う方法を考えています。replaceまたは同様の機能を使用したくありません。

編集:非常に驚くべきことに、これは機能しています...しかし、私はこの解決策が好きではないので、他のアイデア、または少なくともこの動作についての説明があれば。

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

2 に答える 2

10

履歴コンポーネントの出力が無効になっていることを確認してください。すなわち:

 <cfcomponent output=false >

次に、CFCのgetBackUrl関数(および他のすべての関数)設定されていることを確認しoutput=falseます。

また、変数が適切にエスケープされるように、変数でJsStringFormatを使用することを忘れないでください。

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

そうしないと、URLにが含まれている場合にJavaScriptインジェクション、またはJSエラーだけが発生する可能性があります"

于 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 に答える