Подтвердить что ты не робот

Захват журнала консоли iframe

Есть ли способ захватить консоль за пределами iframe?

Я работаю над онлайновой средой IDE, подобной jsFiddle, и я хотел дать пользователям возможность, по крайней мере, прочитать результаты работы javascript-консоли.

4b9b3361

Ответ 1

Вот еще одно решение, если вы не хотите добавлять в 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.contentWindow.console.addEventListener("log", function (value) {
  console.log.apply(null, value);
});

Ответ 2

Если вы хотите распечатать сообщения журнала внутри тела контейнера окна, можно объявить там панель:

var console = {
    panel: $(parent.document.body).append('<div>'),
    log: function(m){
        this.panel.prepend('<div>'+m+'</div>');
    }       
};
console.log('message');