我该如何将console.log输出到父窗口?

3

我有一个函数,本质上是刷新表格,它工作得很好,但一些JS函数不运行。为了调试,我正在尝试在弹出窗口和其父窗口之间传递数据。目前我有这个函数:

$.fn.runFncs = function(isParent)
{
    if (isParent == 1) {
        window.opener.$.fn.compareDates();
        window.opener.$.fn.addStatusIcon();
        window.opener.$.fn.iconTooltips(1);
        window.opener.$.fn.iconTooltips(2);
        window.opener.console.log('test');
    } else {
        $.fn.compareDates();
        $.fn.addStatusIcon();
        $.fn.iconTooltips(1);
        $.fn.iconTooltips(2);
    }
};

这段代码会在ajax请求成功时运行。

当我点击 ajax 按钮后,我会得到我的成功消息,但是在我的父窗口中没有 console.log。我以前使用过 window.opener 来访问父窗口,它似乎正常运行,只是这次出了些问题。

我尝试过搜索,但要么我的查询太具体,要么就是简单的“什么是 console.log”之类的问题,所以我有点困惑。

是否有其他方式将 console.log 输出到父窗口?也许有一个我不知道的文档函数吗?

谢谢!:)

3个回答

3
function log(message){
    console.log(message);
}

将该函数放在您的父窗口中,然后像这样调用它。您基本上需要提供一个包装函数,以便您可以访问它。 window.opener.log("Hi");

@ThisGuyHasTwoThumbs 没问题 :) 请随意将其标记为答案。 - Deckerz
1
window.opener.console.log 在我使用 Karma 和 Chrome 时有效。即使 child.console = console 并调用 console.log 也可以正常工作。我还没有在普通网页上测试过它,也许 Karma 替换了控制台以便能够捕获日志,或者您可以直接访问控制台,答案是错误的。 - inf3rno

2

您无法直接从一个窗口/选项卡访问另一个窗口的控制台对象,但可以从一个窗口向另一个窗口发送消息。父窗口将接收到这些消息,然后将其写入控制台。有关更多详细信息,请参见此问答


谢谢,我已经看过了 :) 完全忘记了localStorage! - treyBake

1

我最近(2018年8月)在Firefox、Chrome、Opera和IE11中尝试过,window.opener.console.log在所有浏览器中都完美运行。所以我认为问题出现在您代码的其他地方。

你甚至可以在父窗口中执行child.console = console并保留console.log,但大多数浏览器会在页面加载之间清除该变量,并且没有办法在文档创建后但在脚本执行之前再次设置它。如果您可以编辑子页面,则可以将window.console = window.opener.console添加到子页面头部。这也应该能解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接