if (!window.console) window.console = { log: function () {} }; $('pre.runnable').each(function () { var pre = $(this); var code = new Function('console', pre.text()); var output; var button = $('<input type="button" value="Run" class="button"/>'). click(function () { if (!output) output = $('<pre class="output" title="click to hide"></pre>'). click(function () { output.hide(); }). appendTo(pre); output.show().empty(); var _console = { log: function (value) { console.log(value); output.append(uneval(value) + "\n"); } }; try { code(_console); } catch (e) { alert(e); } }). appendTo(pre); });
new Function('console', pre.text())
で code には以下のような関数が定義されている
function(console) { // pre の中に記載されていた code // console.log('hello world!!!') とかを含む }
そして_consoleでconsoleを書き換えてcode(_console)
で書き換えた console で code を実行している