Javascript IE8控制台日志-如果开发工具未打开,则使用存根,但如果开发工具打开,则使用存根?

Javascript IE8控制台日志-如果开发工具未打开,则使用存根,但如果开发工具打开,则使用存根?,javascript,internet-explorer-8,console,Javascript,Internet Explorer 8,Console,我使用以下存根来防止在生产应用程序中留下console.log语句: // Protect against IE8 not having developer console open. var console = console || { "log": function () { }, "error": function () { }, "trace": function () { } }; 这可以很好地工作,因为它可以防止在IE8中调用con

我使用以下存根来防止在生产应用程序中留下console.log语句:

//  Protect against IE8 not having developer console open.
var console = console || {
    "log": function () {
    },
    "error": function () {
    },
    "trace": function () {
    }
};
这可以很好地工作,因为它可以防止在IE8中调用console.log时在开发人员工具未打开的情况下引发异常。然而,我不喜欢这样一个事实:如果在代码加载后打开dev.tools,我仍然看不到日志消息

两者都有可能吗?我的尝试导致了console.log调用的无限递归。我也发现了这一点:但除非完全必要,否则我宁愿不这样做


编辑:澄清一下:如果开发控制台未打开,我只想不引发异常,但如果稍后打开,请使用控制台。

是的,您可以执行以下操作:

if (typeof(console) === "undefined") {
   var console = { 
      log: function() { },
      error: function() { },
      trace: function() { }
   };
}

制作一个包装器函数并调用它,而不是
console.log

function log(msg) {
  var console = window.console;
  if (console && typeof console.log === 'function') {
    console.log(msg);
  }
}

这样,它就不会覆盖
window.console
并使其在以后不可用。

您误解了这个问题。这个JavaScript是在我的程序中运行的第一行。开发工具尚未打开。所以,控制台被删除了。然后,过了一会儿,我打开了开发工具。尽管我现在可以成功地使用console.log,但它仍然没有被删除。如果没有自定义函数,我认为这是不可能的。您可以检测开发人员工具,但此时变量已被覆盖。