Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   [Greasemonkey] Хук функции (https://javascript.ru/forum/misc/69356-%5Bgreasemonkey%5D-khuk-funkcii.html)

Zero Tolerance 16.06.2017 18:49

[Greasemonkey] Хук функции
 
Пишу Greasemonkey скрипт.
Как сделать хук какой-либо функции на странице? Можно даже не перехват, а просто словить событие (postevent), которое будет вызываться после того, как сработала какая-нибудь определенная JS-функция на странице.

Alexandroppolus 16.06.2017 19:33

обычно функция заменяется на свою, а в своей уже вызывается старый вариант, потом действия какие-то.

Zero Tolerance 16.06.2017 19:53

Цитата:

Сообщение от Alexandroppolus (Сообщение 455708)
обычно функция заменяется на свою, а в своей уже вызывается старый вариант, потом действия какие-то.

Можно пример такой замены?

MallSerg 16.06.2017 20:01

https://javascript.ru/forum/misc/664...k-funkcii.html

Alexandroppolus 16.06.2017 20:06

допустим, надо отловить глобальную функцию func1.

делаем так:
(function() {
  var win = typeof unsafeWindow == 'undefined' ? window : unsafeWindow;
  
...
  var old_func1 = win.func1; // сохраняем оригинальную функцию

  win.func1 = function() {

    // тут действия перед вызовом
   runActionsBefore(...);

    // вызов функции
    var result = old_func1.apply(this, arguments);

    // действия после вызова
    runActionsAfter(...);

    return result;
  };
})();

Zero Tolerance 16.06.2017 21:40

Цитата:

Сообщение от MallSerg (Сообщение 455710)

Пробую этот код для функции setPointer (которая на странице):
setPointer = new Proxy(setPointer, {
    apply: function(method, context, args) {
        alert("setPointer was invoked");
        method();
    }
});

Не работает. Если я конечно вызову setPointer() в конце этого кода, то сработает, но само оно не вызывается, что странно, ведь функция setPointer() вызывается на странице.

Zero Tolerance 17.06.2017 23:45

Решено:
window.recount = function() {
    // some code
}

recount — JS-функция на странице.


Часовой пояс GMT +3, время: 21:04.