Установить обработчик событий для произвольной функции JS? - PullRequest
0 голосов
/ 04 июля 2011

Я хотел бы написать расширение для Chrome, которое будет работать с определенным приложением чата на основе JS.Это нужно знать каждый раз, когда чат получает сообщение.

Теперь я, очевидно, могу сделать это легко, настроив таймер и проверив, увеличилось ли $("chat-messages").childElements().length, но я бы лучше пошелс более элегантным способом установки обработчика событий какого-либо рода для запуска каждый раз, когда вызывается appendChatMessage().Есть ли способ сделать это?

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

Кажется, не работает.

Ответы [ 4 ]

3 голосов
/ 04 июля 2011

Вы должны сделать oldfunc(). Кроме того, я бы создал событие для этого

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

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

Вы должны решить, к какому элементу присоединить событие и его параметры.

Надеюсь, это поможет. Приветствия

3 голосов
/ 04 июля 2011

Если есть метод 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 голос
/ 04 июля 2011
var oldfunc = appendChatMessage;
appendChatMessage = function() { <s>eval(</s>oldfunc<b>(</b>); myChatMessageReceivedHandler(); }

Должно работать, в зависимости от контекста.

0 голосов
/ 04 июля 2011
var f = function () { console.log('foo'); }

var f2 = f;

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

Это должно напечатать:

foo

bar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...