Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.06.2017, 18:49
Интересующийся
Отправить личное сообщение для Zero Tolerance Посмотреть профиль Найти все сообщения от Zero Tolerance
 
Регистрация: 13.07.2013
Сообщений: 11

[Greasemonkey] Хук функции
Пишу Greasemonkey скрипт.
Как сделать хук какой-либо функции на странице? Можно даже не перехват, а просто словить событие (postevent), которое будет вызываться после того, как сработала какая-нибудь определенная JS-функция на странице.
Ответить с цитированием
  #2 (permalink)  
Старый 16.06.2017, 19:33
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

обычно функция заменяется на свою, а в своей уже вызывается старый вариант, потом действия какие-то.
Ответить с цитированием
  #3 (permalink)  
Старый 16.06.2017, 19:53
Интересующийся
Отправить личное сообщение для Zero Tolerance Посмотреть профиль Найти все сообщения от Zero Tolerance
 
Регистрация: 13.07.2013
Сообщений: 11

Сообщение от Alexandroppolus Посмотреть сообщение
обычно функция заменяется на свою, а в своей уже вызывается старый вариант, потом действия какие-то.
Можно пример такой замены?
Ответить с цитированием
  #4 (permalink)  
Старый 16.06.2017, 20:01
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

https://javascript.ru/forum/misc/664...k-funkcii.html
Ответить с цитированием
  #5 (permalink)  
Старый 16.06.2017, 20:06
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

допустим, надо отловить глобальную функцию 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;
  };
})();
Ответить с цитированием
  #6 (permalink)  
Старый 16.06.2017, 21:40
Интересующийся
Отправить личное сообщение для Zero Tolerance Посмотреть профиль Найти все сообщения от Zero Tolerance
 
Регистрация: 13.07.2013
Сообщений: 11

Сообщение от MallSerg Посмотреть сообщение
https://javascript.ru/forum/misc/664...k-funkcii.html
Пробую этот код для функции setPointer (которая на странице):
setPointer = new Proxy(setPointer, {
    apply: function(method, context, args) {
        alert("setPointer was invoked");
        method();
    }
});

Не работает. Если я конечно вызову setPointer() в конце этого кода, то сработает, но само оно не вызывается, что странно, ведь функция setPointer() вызывается на странице.
Ответить с цитированием
  #7 (permalink)  
Старый 17.06.2017, 23:45
Интересующийся
Отправить личное сообщение для Zero Tolerance Посмотреть профиль Найти все сообщения от Zero Tolerance
 
Регистрация: 13.07.2013
Сообщений: 11

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

recount — JS-функция на странице.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли так использовать callback функции? Denwf Node.JS 2 14.03.2017 10:20
Изменение прототипа функции tsigel Общие вопросы Javascript 11 15.05.2014 01:03
Добавление функции внутрь другой функции Lion_astana jQuery 9 28.12.2013 14:33
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21