文字列のスクリプトをグローバル領域で実行するには、$.globalEvalを使用します。
サンプルソース
例)"var a = 100;"をグローバル領域で実行する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>サンプル</title> <script src="http://code.jquery.com/jquery-3.2.1.min.js"></script> <script> $(function(){ $("#btn1").click(function(){ var str = "var a = 100;"; $.globalEval(str); //eval(str); //これだとローカルとして実行される console.log(a); }); $("#btn2").click(function(){ console.log(a); }); }); </script> </head> <body> <input type="button" id="btn1" value="ボタン1"> <input type="button" id="btn2" value="ボタン2"> </body> </html> |
解説
- $.globalEval()の場合は、1を押す前に2を押すとエラーとなりますが、1を押した後に2を押せば100と出力されます。
- eval()の場合は、1を押した後に2を押してもエラーとなります。