何かの判断をJSで行った後に、scriptタグで外部JSを読み込んだりする事がありました。jQueryをつかって、scriptタグを生成したときに変な挙動があったので回避するメモを残します。
JSのイメージは、
scriptタグの記述をStringで書いて、
それをjQueryの$を使ってタグを生成、
bodyタグへappendする流れです。 NGソース javascript 1
$('body').append($('<script>alert("アラート");</script>')); 純粋に書くと上記のような記述になるとおもいます。ところがこれを実行すると、
')); } })();** ↑このようなscriptの途中の括弧だけが出てきてしまいます。これの原因は、「/」スラッシュが特殊な状態で認識してしまうみたいです。jQueryで普通に閉じタグを作るときに「/」をつかっても何も起きませんが、どうやらscriptの閉じタグだけ、うまく認識してくれないっぽい?です。調べてないのでたしかなことはわかりませんけどね。。
回避するOKソース javascript 1
2
$('body').append($('<script>alert("アラート");<\/script>')); //スラッシュの手前に、バックスラッシュ(¥でもOK)を置く。 「/script」という文字列がダメなら、「/」スラッシュの手前に、バックシュラッシュ(¥マーク)を置くと、変な挙動は回避され、上記のソースではちゃんとalert();が実行されます。正規表現の時と同じ、特殊文字に特殊な意味を持たせない。ということですね。
僕はこうします。 javascript 1
2
$('body').append($('<scr'+'ipt>alert("アラート");<\/scr'+'ipt>')); //「scr」と「ipt」という文字で連結 こうする必要はないかもしれませんが、scriptタグの記述が変な挙動を呼び起こしてしまうなら、いっそのこと「scr」と「ipt」という文字で連結させてしまおう!っておもいました。そもそもこんなことを書くこと自体マレかもしれませんが参考までに。
Google にホスティングされたFrameworkのパスを1クリックでコピーできるサイトです。このサイトの面白いところは、クリックされた数がカウントされていきます。クリップボードにコピーってどうやってやるんですかね。。。
ホスティングされているFramework一覧。
・jQuery
・jQuery UI
・chrome frame
・swfobject
具体的な使い方はこちら。
・mootools
・Ext JS
・YUI(Yahoo UI)
・Prototype
・script.aculo.us
・DOJO
http://scriptsrc.net
js 1
2
3
4
5
6
7
8
9
10
11
12
13
<script src="jquery-1.3.2.min.js"></script> <script> (function(){ if(typeof jQuery == 'undefined'){ return; } jQuery.noConflict(); jQuery(function($){ // ここに処理を記述 // $==jQueryで利用可能 }); })(); </script> このソースコードをペッと貼り付けて、実際に書き始める場所は10行目からです。この形が定着しているのは、いくつかの理由があります。
functionを大きく、( ) 括弧で括っているのは関数や変数をローカル化するため。 5行目のreturnは、jQueryのライブラリが何らかのエラーがあったときに、JavaScriptエラーを出さないようにするため。 8行目のnoConflictはprototype.jsなどの複数ライブラリを使用する際に、「$」を初期化するため。 9行目の引数$にすることによって、10行目以降に$==jQueryとして使うことができる