Да, это возможно (ознакомьтесь с демонстрацией ниже) - внедрив собственную виртуальную консоль поверх собственной консоли браузера, а затем синхронизировав ее с реальной.
Это гораздо проще, чем кажется:
- поддерживает буфер отображения (например, массив строк, представляющих по одной строке каждая)
- вызывает
console.clear()
перед записью для удаления любого предыдущего содержимого - вызов
console.log()
(или предупреждение, ошибка и т. Д.), Чтобы заполнить консоль содержимым из буфера дисплея
На самом деле, я занимаюсь этим уже некоторое время.Короткая, зачаточная реализация идеи могла бы быть чем-то вроде следующего, но все же способной анимировать содержимое консоли:
// =================================================
// Rudimentary implementation of a virtual console.
// =================================================
var virtualConsole = {
lines: [],
currentLine: 0,
log: function (msg, appendToCurrentLine) {
if (!appendToCurrentLine) virtualConsole.currentLine++;
if (appendToCurrentLine && virtualConsole.lines[virtualConsole.currentLine]) {
virtualConsole.lines[virtualConsole.currentLine] += msg;
} else {
virtualConsole.lines[virtualConsole.currentLine] = msg;
}
console.clear();
virtualConsole.lines.forEach(function (line) {
console.log(line);
});
},
clear: function () {
console.clear();
virtualConsole.currentLine = 0;
}
}
// =================================================
// Little demo to demonstrate how it looks.
// =================================================
// Write an initial console entry.
virtualConsole.log("Loading");
// Append to last line a few times.
var loadIndicatorInterval = setInterval(function () {
virtualConsole.log(".", true); // <- Append.
}, 500);
// Write a new line.
setTimeout(function () {
clearInterval(loadIndicatorInterval);
virtualConsole.log("Finished."); // <- New line.
}, 8000);
Он, безусловно, имеет свои недостатки при микшировании с прямым взаимодействием с консолью, и может определенно выглядеть уродливо - но, безусловно, имеет свои действительные применения, которых вы не смогли бы достичь без него.