在任意JS函数上设置事件处理程序?

时间:2011-07-03 21:58:02

标签: javascript function

我想编写一个适用于特定基于JS的聊天应用程序的Chrome扩展程序。每次聊天收到消息时都需要知道它。

现在,我显然可以通过设置计时器并检查$("chat-messages").childElements().length是否已增加来轻松完成此操作,但我宁愿选择更优雅的方法来设置某种类型的事件处理程序每次调用appendChatMessage()时都会触发。有没有办法做到这一点?

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

似乎无法正常工作。

4 个答案:

答案 0 :(得分:3)

如果每次收到新邮件时都会调用方法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;
};

答案 1 :(得分:3)

你必须oldfunc()。除此之外,我还要为此创建一个活动

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

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

您应该决定将事件附加到哪个元素及其参数。

希望这会有所帮助。干杯

答案 2 :(得分:1)

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

应该有效,具体取决于具体情况。

答案 3 :(得分:0)

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

var f2 = f;

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

这应该打印:

foo

bar