次のように、変数に URL が含まれていると仮定します。
$(document).ready(function(){
$('#player').youTubeEmbed("<%=escape_javascript(@clip)%>");
});
(申し訳ありませんが、JavaScript が HTML と同じファイルに含まれていなかったという事実を見逃していました。同じようにすべきではありません!)
変数に URL が含まれていると仮定すると、URL を表示したくない場合は、次のようにページ変数に埋め込むことができます ( div
show.html.erb のコードを次のように置き換えます)。
<script type='text/javascript'>
window.myStuff = {
clipUrl: "<%=escape_javascript(@clip)%>"
};
</script>
...(また
<script type='text/javascript'>
var myStuff = {
clipUrl: "<%=escape_javascript(@clip)%>"
};
</script>
...これはほとんど同じことです)。
...そして、次のように使用できます。
$(document).ready(function(){
$('#player').youTubeEmbed(window.myStuff.clipUrl);
});
このように変数の値を出力する場合、書き出されたものが最終的に有効な JavaScript であることを確認する必要があります。たとえば、@clip
変数に a"
または aが含まれている場合、が に変換され、単独のバックスラッシュが に変換され\
ていることを確認する必要があります。Jakub Hampl は、この関数を有益に指摘してくれました。これをコード例に編集しました。"
\"
\\
escape_javascript
これを行うということは、 に新しいシンボルを配置していることを意味しますwindow
。新しいシンボルをオブジェクトにしたので、他のものでこれを行う必要がある場合、それらを同じオブジェクトに含めることができるので、シンボルがいたるところに配置されることはありません (多数のグローバル シンボルを作成します。つまり、そのため、window
プロパティ — メンテナンスの問題になる傾向があり、避けるのが最善です)。たとえば、2 つのクリップがあるとします。
<script type='text/javascript'>
window.myStuff = {
someNiftyClip: "<%=escape_javascript(@clip)%>",
someOtherNiftyClip: "<%=escape_javascript(@anotherClip)%>"
};
</script>
トピック外: calling という行youTubeEmbed
で、最後にセミコロンを追加したことに注意してください。JavaScript のセミコロン挿入に頼らないことをお勧めします。