Javascript iframe的捕获控制台日志

Javascript iframe的捕获控制台日志,javascript,iframe,console,Javascript,Iframe,Console,有没有办法在iframe之外捕获控制台 我正在开发一个类似于JSFIDLE的工具,我想让用户选择至少读取javascript控制台的结果。如果您想打印窗口容器主体内的日志消息,可以在那里声明面板: var console = { panel: $(parent.document.body).append('<div>'), log: function(m){ this.panel.prepend('<div>'+m+'</div>

有没有办法在iframe之外捕获控制台


我正在开发一个类似于JSFIDLE的工具,我想让用户选择至少读取javascript控制台的结果。

如果您想打印窗口容器主体内的日志消息,可以在那里声明面板:

var console = {
    panel: $(parent.document.body).append('<div>'),
    log: function(m){
        this.panel.prepend('<div>'+m+'</div>');
    }       
};
console.log('message');
var控制台={
面板:$(parent.document.body).append(“”),
日志:函数(m){
本面板前置(“”+m+“”);
}       
};
console.log('message');

如果您不想附加到HTML,这里有另一个解决方案

var console = {
  __on : {},
  addEventListener : function (name, callback) {
    this.__on[name] = (this.__on[name] || []).concat(callback);
    return this;
  },
  dispatchEvent : function (name, value) {
    this.__on[name] = (this.__on[name] || []);
    for (var i = 0, n = this.__on[name].length; i < n; i++) {
      this.__on[name][i].call(this, value);
    }
    return this;
  },
  log: function () {
    var a = [];
    // For V8 optimization
    for (var i = 0, n = arguments.length; i < n; i++) {
      a.push(arguments[i]);
    }
    this.dispatchEvent("log", a);
  }
};

您可以按照建议覆盖控制台日志,这样不会在iframe的内容中打印结果吗?我想在iframe容器的bodyHi中的div中打印控制台日志,谢谢,它按预期工作,但是您能解释一下这行的功能吗<代码>面板:$(parent.document.body).append(“”),,我不明白为什么我们使用
.append('div')
部分。这只是用于将消息包装到单个
div
中。您也可以使用
panel:$(parent.document.body)
,但之后您可以将每条消息直接作为容器正文的子项。是的,过了一会儿,我了解了它的用途,并对其进行了修改以满足我的需要,感谢您花时间向我解释。
iframe.contentWindow.console.addEventListener("log", function (value) {
  console.log.apply(null, value);
});