Search code examples
javascriptiframeconsole

Capture console log of an iframe


Is there a way to capture the console outside of an iframe?

I'm working on an online IDE similar to jsFiddle and I wanted to give the users to option to at least read the results of the javascript console.


Solution

  • Here is another solution if you don't want to append to 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);
      }
    };
    

    Outside the iframe

    iframe.contentWindow.console.addEventListener("log", function (value) {
      console.log.apply(null, value);
    });