2014

the whole world is peaceful.

console.log 書き換え

f:id:taizooo:20140312175615p:plain
f:id:taizooo:20140312175635p:plain

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 を実行している

powered by hatena blog.
the nikki system for lifelogging junkies.

all posts © their original owners.
writing is reusable solely under the BY Creative Commons License.