2011-07-03 91 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 
}); 

您应该决定将哪个元素附加到它的参数及其参数中。

希望这会有所帮助。干杯