JavaScriptのブラウザ上でのデバッグログをconsole.logのかわりにHTMLに表示
スマホ実機での動作確認時などで、開発者ツールが使えない状態で、画面上に気軽にJavaScriptオブジェクトをログ出力させます。HTMLに <div id="log"></div>
という要素を配置しておき、JavaScriptから任意のオブジェクトの内容をHTMLに表示させます。
console.log
とまではいかないものの、オブジェクトもJSONで整形して表示します。JavaScriptオブジェクトのプロトタイプをすべてたどって属性を表示します。すべての属性値を表示してしまうと膨大になってしまいますので、階層数に上限を設けました。
function log(obj) { function getAllProperties(obj, maxDepth) { if (obj === null) { return null; } if (typeof obj !== "object") { return obj; } const cloneObj = {}; let currentObj = obj; while (currentObj !== null) { if (maxDepth <= 0) { cloneObj["..."] = "..."; break; } const currentProps = Object.getOwnPropertyNames(currentObj); currentProps.forEach(prop => { if (!(prop in cloneObj)) { const v = obj[prop]; cloneObj[prop] = getAllProperties(v, maxDepth - 1); } }); currentObj = Object.getPrototypeOf(currentObj); maxDepth--; } return cloneObj; } const logElem = document.getElementById("log"); const message = JSON.stringify(getAllProperties(obj, 3), null, " "); logElem.textContent = message + "\n----\n" + logElem.textContent; console.log(obj); }
#log { white-space: pre-wrap; }
<div id="log"></div>