Javascript 如何从外部源捕获console.log?

Javascript 如何从外部源捕获console.log?,javascript,iframe,console.log,Javascript,Iframe,Console.log,我了解如何修改console.log函数来截获日志并将其推送到阵列中。但是,这似乎并不适用于所有控制台日志。在我的html中,我加载了一个html Web应用程序(\creative\300x600 with video\index.html),它还提供了一个console.log(“click detected”),我可以在chrome开发工具中看到,但并没有被控制台捕获。ogs(代码示例中的第二个脚本)。我怀疑,因为这是一个正在加载的外部文件,所以我无法截获它 是否有从任何来源获取所有con

我了解如何修改console.log函数来截获日志并将其推送到阵列中。但是,这似乎并不适用于所有控制台日志。在我的html中,我加载了一个html Web应用程序(
\creative\300x600 with video\index.html
),它还提供了一个
console.log(“click detected”)
,我可以在chrome开发工具中看到,但并没有被控制台捕获。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>

这里的问题是因为
iframe
iframe
s具有不同的
window
对象,独立于父对象的
window
对象。这意味着您对父级的
窗口.console所做的任何修改都不会影响iframe的
窗口.console

您可以通过获取框架的
窗口
对象,并修改其
控制台
。但是您必须为每个现在和将来的
iframe
执行此操作。此外,您无法访问呈现来自另一个域的页面的iframe的
contentWindow


如果您试图捕获所有帧的日志,并以某种方式将它们合并到一个大日志中,那么更好的选择是在您想要跟踪的每个页面上都使用相同的
控制台
-更改脚本。然后将所有日志发送到服务器,按时间戳或其他方式排序。这就是基本原理。

我在对原始问题的更新中更新了代码,使用div而不是iframe,但仍然遇到相同的问题。只是澄清一下,外部html加载了一个控制台日志,该日志在chrome开发工具中可见,但没有被我修改过的函数记录。这是否意味着我需要访问外部html并修改console.log函数?@kevhol该外部页面,无论是加载在
还是
中,都是一个完全不同的文档,具有自己的全局范围。让脚本正常工作的唯一方法是访问该页面(即,您可以访问代码,或者托管在同一域中)。外部文件托管在同一域中。我正在研究如何访问该页面并在该范围内更改变量。
<!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>