【问题标题】:Listen(capture) an iframe console logs收听(捕获)iframe 控制台日志
【发布时间】:2020-12-16 16:23:16
【问题描述】:

我正在尝试捕获一个 iframe 的控制台日志,我无权访问它的源代码和实现。

 <iframe src="an http address" name="my-iframe"  allowFullScreen/>

当 iframe 记录数据时,我会在控制台中看到它们。但问题是,

这段代码

// define a new console
var console = (function(oldCons){
    return {
        log: function(text){
            oldCons.log(text);
            if(text === "hi"){
              alert("text")
            }
        },
        info: function (text) {
            oldCons.info(text);
            if(text === "hi"){
              alert("text")
            }
        },
        warn: function (text) {
            oldCons.warn(text);
            if(text === "hi"){
              alert("text")
            }
        },
        error: function (text) {
            oldCons.error(text);
            if(text === "hi"){
              alert("text")
            }
        }
    };
}(window.console));

//Then redefine the old console
window.console = console;

我从this post 获得的内容不适用于 iframe 日志。 它只适用于我的应用控制台日志。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    如果 src 是不同的域,并且您不能直接在另一个域上运行代码(例如,通过能够修改或插入 .js 到其中),那么你无能为力。这是出于安全原因:浏览器不希望在域之间泄露任何信息,除非信息的发送者故意允许。

    如果您可以更改其他域上的代码,您可以对控制台进行猴子补丁,并使用postMessage 将日志信息传递给父窗口,以便父窗口可以使用它。

    如果您碰巧试图检查消息仅供您个人使用(而不是互联网上的随机人员使用),您可以修改您的浏览器以在另一个上运行您的自定义 JavaScript带有用户脚本的域,使用像 Tampermonkey 这样的用户脚本管理器。

    【讨论】:

    • 是的,它位于不同的域中,我无权访问它。所以你说我在控制台中对 iframe 记录的数据无能为力??
    • 正确,除了从父页面清除整个控制台之外,您无能为力。日志消息直接从嵌入式 iframe 发送到浏览器控制台;它们不通过父站点,因此如果您可以更改的唯一代码是在父站点上,您将无法检查或更改 iframe 的日志记录行为。
    猜你喜欢
    • 2013-02-02
    • 2019-04-19
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多