Как захватить console.log из внешних источников? - PullRequest
0 голосов
/ 20 февраля 2019

Я понимаю, как изменить функцию console.log, чтобы перехватывать журналы и помещать их в массив.Однако, похоже, это не работает для всех журналов консоли.В моем html я загрузил html webapp (\creative\300x600 with video\index.html), который также делает console.log("click detected"), который я вижу в моих инструментах chrome dev, но не фиксируется консолью.ogs (второй скрипт в примере кода).Я подозреваю, что, поскольку это загружаемый внешний файл, я не могу его перехватить.

Есть ли решение получить все console.log из любого источника и сохранить его?

<!DOCTYPE html>
<head>
<script>

//add index.html to div on click

function load_home() {
    console.log("Loaded");
    document.getElementById("content").src='creative\\300x600 with video\\index.html';

}
window.addEventListener("click",load_home);
</script>
<script>

//modify console.log

console.defaultLog = console.log.bind(console);
console.logs = [];
console.log = function() {
    console.defaultLog.apply(console, arguments);
    console.logs.push(Array.from(arguments));
};
    </script>
</head>
<html>
<iframe id="content" style="width: 300px; height:600px; background-color:blue"  ></iframe>
</body>
</html>

РЕДАКТИРОВАТЬ:

Попытка сделать это на div, а не вiframe, та же проблема невозможности записи console.log внешнего html.Только console.log("loaded") из функции load_home регистрируется.

<!DOCTYPE html>
<head>

<script>
function load_home() {
    console.log("Loaded");
     document.getElementById("content").innerHTML='<object type="text/html" data="creative\\300x600 with video\\index.html" ></object>';


}
window.addEventListener("click",load_home);
</script>
<script>
console.defaultLog = console.log.bind(console);
console.logs = [];
console.log = function() {
    console.defaultLog.apply(console, arguments);
    console.logs.push(Array.from(arguments));
};
    </script>
</head>
<html>


<div id="content" style="width: 300px; height:600px; z-index:-1;" ,"onclick=load_home();" </div>

</body>
</html>

1 Ответ

0 голосов
/ 20 февраля 2019

Проблема здесь из-за этого iframe.iframe s имеют другой объект window, независимый от родительского объекта window.Это означает, что любые изменения, сделанные вами в window.console родительского элемента, не будут влиять на window.console.

iframe. Вы можете получить объект window фрейма через contentWindow и изменить его console.Но вам придется делать это для каждого настоящего и будущего iframe.Кроме того, вы не можете получить доступ к contentWindow iframe, отображающему страницу из другого домена.

Если вы пытаетесь захватить журналы всех фреймов и каким-то образом объединить их в один большой журнал, лучший вариантдолжен иметь такой же console изменяющий скрипт на каждой странице, которую вы хотите отслеживать.Затем отправьте все свои журналы на сервер, упорядоченные по метке времени или что-то еще.Вот как работает Sentry .

...