1

我注意到一个奇怪的行为,即我的console.log陈述没有做任何事情。我终于将其跟踪到外部脚本:

<!-- Load the systems bio heatmap package -->
  <script type="text/javascript" src="http://systemsbiology-visualizations.googlecode.com/svn/trunk/src/main/js/load.js"></script>
  <script type="text/javascript">
//  uncommenting the following line ruins console.log
//    systemsbiology.load("visualization", "1.0", {packages:["bioheatmap"]});
  </script>

不幸的是,这个脚本用于运行谷歌图表(AFAIK)的唯一热图包。

有没有办法以某种方式备份console.log然后在执行他们的代码后恢复它?我尝试进行浅备份,但没有运气:

<!-- Load the systems bio heatmap package -->
  <script type="text/javascript" src="http://systemsbiology-visualizations.googlecode.com/svn/trunk/src/main/js/load.js"></script>
  <script type="text/javascript">
var temp = console.log;
//  the following line ruins console.log
systemsbiology.load("visualization", "1.0", {packages:["bioheatmap"]});

console.log = temp;
console.log('test'); // does not work

  </script>

现在我在问一个知道他在做什么的人。

在此先感谢您的帮助。

4

2 回答 2

4

您的代码确实有效,但前提是该console对象被保留,并且其上的方法被替换。

var temp = console.log;

//  the following line ruins console.log
console.log = function() {};

// put console.log back
console.log = temp;
console.log('test');

http://jsfiddle.net/CBv2T/

如果改为console替换对象,我怀疑是这种情况,这将行不通。那么为什么不保存/恢复整个控制台对象呢?

var temp = console;

//  the following line ruins console.log
window.console = {};

// Put the whole console object back
window.console = temp;
console.log('test');

http://jsfiddle.net/CBv2T/1/


但正如@gpojd 所指出的,这是您正在使用的库中的一个主要错误。他们真的应该解决这个问题......

于 2013-05-28T19:50:17.297 回答
0
<!-- backup console log method -->
  <script> var temp = console.log.bind(console); </script>

<!-- Load the systems bio heatmap package -->
  <script src="http://systemsbiology-visualizations.googlecode.com/svn/trunk/src/main/js/load.js"></script>

<!-- restore  console log method -->
  <script>
     console.log = temp;
     console.log('test'); // does work
  </script>

编辑:您可以使用绑定修复 OP 中的代码:

  var temp = console.log.bind(console);

由于 log() 方法被硬编码为在内部使用“this”,因此我们在记住该方法时需要带上“this”。

于 2013-05-28T19:49:50.190 回答