【问题标题】:How to silence console output on an iframe如何使 iframe 上的控制台输出静音
【发布时间】:2015-02-19 08:23:41
【问题描述】:

我的页面正在使用 iframe 来显示一些内容,但现在我正在处理主页,并且 iframe 的输出使我的控制台变得混乱并且难以调试。有没有办法让控制台静音?

我尝试将控制台设置为无操作:

var CONSOLE_LOG = window.console.log;
window.console.log = function() { /* nop */ };

function LOG(msg)
{
    window.console.log = CONSOLE_LOG;
    console.log(msg);
    window.console.log = function() { /* nop */ };
}

我预计这会起作用,但 iframe 仍会生成输出。

【问题讨论】:

    标签: javascript iframe


    【解决方案1】:

    一个工作小提琴here

    var iframe = document.createElement('iframe');
    iframe.setAttribute("src", "yourIframeURL");
    document.body.appendChild(iframe);
    iframeWindow = iframe.contentWindow;
    iframeWindow.console.log = function() { /* nop */ };
    

    这适用于 Mozilla、Chrome、Safari

    【讨论】:

    • 有趣。我想看这个的现场演示
    • 我什么时候应该这样做?我首先使用createElement 创建 iframe,添加到 DOM,设置 on load 方法,然后设置 src 属性。如果我确实让您在创建后(插入 DOM 之前)立即说,我会得到一个异常,即 null 的 parentWindow 未定义。如果我稍后再做,iframe 仍然会生成输出
    • 看到这个小提琴jsfiddle.net/gskf2dxx,测试它评论和取消评论 iframeWindow.console.log = function() { /* nop */ };
    • 在 Firefox 中工作正常,我也让它在 Chrome 上工作,看到这个小提琴jsfiddle.net/gskf2dxx/12,但在 IE 和 Opera 上不起作用
    • 您可能应该补充一点,这不适用于任何第三方 iframe,您将收到错误消息:SecurityError: Permission denied to access property "console" on cross-origin object
    【解决方案2】:

    我遇到了一个用例,其中 iframe 是由 3rd 方库创建的,所以我不得不从文档中获取它们而不是创建它们:

    const iframes = Array.from(document.getElementsByTagName('iframe'));
    for (const item of iframes) {
      item.contentWindow.console.log = () => { /* nop */ };
    }
    

    【讨论】:

    • 不鼓励在 SO 上仅使用代码回答。请作为质量和长期价值的一些解释。增加洞察力以帮助未来访问者解决他们自己的类似问题的答案更有用,也更有可能获得支持。
    • @SherylHohman 你太严格了:),有时代码是自我记录的。
    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2022-06-25
    相关资源
    最近更新 更多