2015-05-29 63 views
2

我想重定向控制台调用到log4javascript库。log4javascript IE8意外错误“功能attendue”/“预期的功能”

因此,基本上,任何对console.log的调用都会调用log.info,log是一个Log4javascript实例。

但是当它调用log.info我得到一个“Fonction attendue”错误(法国),这基本上意味着“功能有望”。

我也试着拨打log.info从IE8控制台,同样的故事。

我不认为这是相关的脚本,但在这里它是区分:

(function (fallback) { 

    fallback = fallback || function() { }; 

    // function to trap most of the console functions from the FireBug Console API. 
    var trap = function() { 
     // create an Array from the arguments Object 
     var args = Array.prototype.slice.call(arguments); 
     // console.raw captures the raw args, without converting toString 
     console.raw.push(args); 
     var message = args.join(' '); 
     console.messages.push(message); 
     fallback(message); 
    }; 

    // redefine console 
    if (typeof console === 'undefined') { 
     console = { 
      messages: [], 
      raw: [], 
      dump: function() { return console.messages.join('\n'); }, 
      log: trap, 
      debug: trap, 
      info: trap, 
      warn: trap, 
      error: trap, 
      assert: trap, 
      clear: function() { 
       console.messages.length = 0; 
       console.raw.length = 0 ; 
      }, 
      dir: trap, 
      dirxml: trap, 
      trace: trap, 
      group: trap, 
      groupCollapsed: trap, 
      groupEnd: trap, 
      time: trap, 
      timeEnd: trap, 
      timeStamp: trap, 
      profile: trap, 
      profileEnd: trap, 
      count: trap, 
      exception: trap, 
      table: trap 
     }; 
    } 

})(log.info); 

我想Log4Javascript支持IE8,所以有什么错在这里?谢谢。

回答

1

log4javascript确实支持IE 8的问题是this处于呼叫不正确的log.info,其预计将被称为一个方法,并因此不得不log参考作为this值。我建议在记录器对象传递给你的IIFE并调用其info方法修复它:

(function (log) { 
    var fallback = log ? 
      function() { 
       var args = Array.prototype.slice.call(arguments); 
       log.info.apply(log, args); 
      } : 
      function() { }; 

    // function to trap most of the console functions from the FireBug Console API. 
    var trap = function() { 
     // create an Array from the arguments Object 
     var args = Array.prototype.slice.call(arguments); 
     // console.raw captures the raw args, without converting toString 
     console.raw.push(args); 
     var message = args.join(' '); 
     console.messages.push(message); 
     fallback(message); 
    }; 

    // redefine console 
    if (typeof window.console === 'undefined') { 
     window.console = { 
      messages: [], 
      raw: [], 
      dump: function() { return console.messages.join('\n'); }, 
      log: trap, 
      debug: trap, 
      info: trap, 
      warn: trap, 
      error: trap, 
      assert: trap, 
      clear: function() { 
       console.messages.length = 0; 
       console.raw.length = 0 ; 
      }, 
      dir: trap, 
      dirxml: trap, 
      trace: trap, 
      group: trap, 
      groupCollapsed: trap, 
      groupEnd: trap, 
      time: trap, 
      timeEnd: trap, 
      timeStamp: trap, 
      profile: trap, 
      profileEnd: trap, 
      count: trap, 
      exception: trap, 
      table: trap 
     }; 
    } 
})(log); 
+0

它可能工作(现在不能测试),但我相信'apply'功能上不存在IE8 ,作为“绑定”。 – Vadorequest

+1

@Vadorequest:'应用程序'肯定存在于IE 8中。我认为它自5.5版起就已经在IE中。不过,你说'绑定'是正确的,那很晚。在标准方面,'apply'是ECMAScript 3,'bind'是ECMAScript 5. –

+0

很高兴当时错了:)我会尽快测试这个。 – Vadorequest