8

我想在网站中嵌入一个 JS 控制台以进行扩展调试。有没有可用的库或钩子?如何捕获 console.log 消息?

4

3 回答 3

7

如何捕获 console.log 消息?

您可以对真实方法进行猴子修补console.log,并对输入进行任何您喜欢的操作:

var realConsoleLog = console.log;
console.log = function () {
    var message = [].join.call(arguments, " ");
    // Display the message somewhere... (jQuery example)
    $(".output").text(message);
    realConsoleLog.apply(console, arguments);
};

这是一个工作示例console.log它记录对元素的调用.output,以及像往常一样在控制台中的调用。

于 2013-10-28T13:48:56.197 回答
1

您可以覆盖 console.log

<div id="console"></div>

脚本 :

if (window.console) console = { 
    log: function(){
        var output='',
            console=document.getElementById('console');
        for (var i=0;i<arguments.length;i++) {
            output+=arguments[i]+' ';
        }
        console.innerText+=output+"\n";
    }
};

//test
var test=12345;
console.log('test', 'xyz', test);
于 2013-10-28T13:52:23.003 回答
1

您可以使用该eval()函数评估字符串中的 javascript,然后将该输出打印到某个 div。这会给你一些 REPL 的能力。

const consoleElm = document.querySelector('#console');
const clearButton = document.querySelector('#clear');

clearButton.addEventListener('click', (event) => {
	consoleElm.innerHTML = '';
});

const consoleForm = document.querySelector('#console-form');
consoleForm.addEventListener('submit', (event) => {
	event.preventDefault();
  const command = event.target.querySelector('#command').value;
  const value = eval(command);
  consoleElm.innerHTML += (value === undefined ? 'undefined' : value) + '\n';
});
<div>
  <form id="console-form">
    <input type="text" id="command">
    <input type="submit" value="Run Command">
    <button id="clear" type="button">Clear</button>
  </form>
  <hr>
  <pre id="console"></pre>
</div>

于 2016-10-17T16:55:53.570 回答