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



我想写一个Chrome扩展,它可以与特定的基于JS的聊天应用程序一起使用。每次聊天收到消息时,都需要意识到这一点。

现在,我显然可以通过设置计时器并检查$("chat-messages").childElements().length是否增加来轻松地做到这一点,但我更愿意采用更优雅的方法,即设置某种事件处理程序,以便在每次调用appendChatMessage()时触发。有办法做到这一点吗?

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

似乎不起作用。

如果有一个方法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;
};

您必须执行oldfunc()。除此之外,我会为创建一个事件

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

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

希望这能有所帮助。干杯

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

应该有效,这取决于上下文。

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

这应该打印:

foo

bar

最新更新