2011-06-23 71 views
5

我想爲console.log()設置偵聽器,並在不阻止默認行爲的情況下對郵件執行某些操作。所以,開發工具的控制檯也應該得到這個消息。有任何想法嗎?正在偵聽console.log

回答

8

從來沒有在網頁上試過這個,但它在瀏覽器插件中工作(因爲安全原因,javascripts權限是不一樣的)。

你可以明確地去這樣的事情:

(function(){ 

    var originallog = console.log; 

    console.log = function(txt) { 
     // Do really interesting stuff 
     alert("I'm doing interesting stuff here !"); 

     originallog.apply(console, arguments); 
    } 

})(); 

在JavaScript中有趣的是,函數是對象太:d

+0

看起來'console.log'不能在'console'對象之外工作 - 也許它依賴於'this'變量。另外,我不認爲把函數當作對象很有趣:它是使這種語言非常好的東西。 –

+0

你是對的!我編輯了我的答案。我們會很好的回答我們兩個人的) – deadalnix

+0

這很好。 +1 –

2

這是一個小黑客,但我不知道有是更好的解決方案:

console._log_old = console.log 
console.log = function(msg) { 
    alert(msg); 
    console._log_old(msg); 
} 
console._log_old = console.log 
console.log = function(msg) { 
    alert(msg); 
    console._log_old(msg); 
} 
+0

該解決方案的問題在於它對全球範圍有副作用。更好的解決方案是將console._log_old存儲在局部變量中而不是全局範圍中。 – deadalnix

+0

@deadalnix不會工作,看到我對你的文章的評論 –

+0

是的,它將使用apply;)請參閱我編輯的答案。無論如何,感謝您提出這個問題,在之前的版本中是這樣的,我並沒有注意到這一點。 – deadalnix