2011-07-03 131 views
0

我想編寫一個Chrome擴展,與特定的基於JS的聊天應用程序的工作。每次聊天收到消息時都需要了解它。設置事件處理程序?

現在,我明顯可以通過設置一個計時器並檢查$("chat-messages").childElements().length是否已經增加來輕鬆完成此操作,但我寧願使用更優雅的方法設置每次啓動某種事件處理程序調用appendChatMessage()。有沒有辦法做到這一點?

var oldfunc = appendChatMessage; 
appendChatMessage = function() { eval(oldfunc); myChatMessageReceivedHandler(); } 

似乎沒有工作。

+0

如果這被標記爲'jquery'? –

+0

@Kerrek:它不會有很多工作要做,jQuery的,但我已經重新標記它,因爲它是可用的,我想。 – Ryan

回答

1
var oldfunc = appendChatMessage; 
appendChatMessage = function() { eval(oldfunc(); myChatMessageReceivedHandler(); }

應該工作,根據上下文。

+0

這工作對我自己的功能,但拋出當我嘗試在一個聊天功能如下: 遺漏的類型錯誤:無法調用未定義 –

+0

woops的方法「的preventDefault」!傻我。我忘了發送oldfunc()所需的參數。 –

0
var f = function() { console.log('foo'); } 

var f2 = f; 

f = function() { f2(); console.log('bar'); } 

這應該打印:

foo

bar

2

如果有一種方法appendChatMessage被稱爲每次有新郵件到達時,你可以做這樣的

var old = appendChatMessage; 
appendChatMessage = function() { 
    // call the initial method and store the result 
    var result = old.apply(this, arguments); 

    // do your stuff here 

    // return the initial result 
    return result; 
}; 
2

你要做的oldfunc()。除此之外,我會創建一個事件

var oldfunc = appendChatMessage; 
appendChatMessage = function() { oldfunc(); $(document).trigger("msg_received"); } 

$(document).bind("msg_received", function(params){ 
    //do your logic when message arrives 
}); 

您應該決定將哪個元素附加到它的參數及其參數中。

希望這會有所幫助。乾杯