Хуки в JS

Пожалуйста, поясните как использовать хуки в JS.
И чем отличаются:
ls.hook.marker
от
ls.hook.run
Вернее даже со вторым понятно, он запускает код, а первый под вопросом.

23 комментария

комментарий был удален
avatar
Хуки ничего не запускают -_-
Запускает обработчик функцию на указанный хук.
Насчет сабжа я думаю это просто алиас из старых версий.
avatar
А можно какой то пример использования js хука. Простите за наглость, наверное можно посмотреть в каких-то бесплатных плагинах…
avatar
Да, я так и делал. Бесплатные плагины лучший учебник )
Что касается js, то вызов ничем не отличается от вызова обычного хука. Можно в поиске по сайт найти кучу инфы.

Вот пример из плагина shoutbox


	public function RegisterHook() {
		$this->AddHook('init_action','CheckUpdateUnterval');
		$this->AddHook('template_content_begin','ViewShoutbox');
	}


init_actions — хук из php
template_content_begin — хук из шаблона. Как видно для прикрепления к шаблоновым хукам нужно добавлять template.
avatar
ок, попробую. Для js интерессно приставка js нада?
avatar
Можно в поиске по сайт найти кучу инфы.
Будь так добр, мил человек, найди мне в поиске именно про js-хуки. Не про php, не про template, а именно про js. Только не говори, пожалуйста, больше, что они ничем не отличаются от php и template.
avatar
пример инжекции произвольного js в код с маркером — github.com/livestreet/lsplugin-native/blob/master/js/main.js#L26
пример js хука github.com/livestreet/livestreet/blob/master/templates/skin/synio/js/template.js#L178
avatar
Спасибо, Макс. Принцип, вроде понял: маркер позволяет прямо js-код воткнуть, а просто хук — функцию вызвать. Но скажи, зачем нужно было две разных реализации js-хуков скрещивать? В чем фишка?

Вот нужно мне, например, встрять в ф-ю ls.blog.toggleJoin(), причем, как перед ajax-запросом, так и после. И вижу, что перед запросом идет маркер:
ls.hook.marker('toggleJoinBefore')

а после — хук:
ls.hook.run('ls_blog_toggle_join_after',[idBlog,result],obj)

Это значит, что я фактически для одного действия должен два разных обработчика оформлять — один — в виде инжектора, а другой — в виде хука. И форматы вызова разные, принцип именования точек вызова. Зачем? Почему нельзя было что-то одно оставить?
avatar
маркеры более функциональны и более затратны. Например, маркером toggleJoinBefore можно переопределить url, параметры ajax запроса или вообще прервать выполнение метода. А хук работает только как событие, которое не может повлиять на общий контест выполнение. Например, ls_blog_toggle_join_after просто сообщает, что пользователь подключился или отключился от блога.
avatar
контекст*
avatar
Угу, значит, допустим есть такая конструкция:

ls.good = function() {
  var msg='blablabla';
  ls.hook.marker('toggleTest');
  func1(msg);
}

И я у себя где-то пишу:
ls.hook.inject([ls,'good'], 'alert(msg);msg="qwerty";','toggleTest');


То, в итоге, получу такой исполняемый код:

ls.good = function() {
  var msg='blablabla';
  alert(msg); msg="qwerty";
  func1(msg);
}

Так?
avatar
все верно
avatar
Начал писать ответ, но он такой объемный получился, что отдельным топ ком повесил: livestreet.ru/blog/wishlist/12341.html
avatar
Пожалуй, апну топик.

Вот то ли я совсем туп, то ли поиск по сайту хреновый, то ли еще чо. Но я помню, что был топик, где про js-хуки говорилось. А щас ни хрена поиск не дает.

Кто-то может харей меня конкретно ткнуть, где про это написано?
avatar
было сообщение от меня, где говорилось, что такой топик появится, но не появился
avatar
вот как они появились, документации на них нет.
livestreet.ru/blog/9417.html
avatar
avatar
по нему код и писал
avatar
Смотрю в книгу — вижу фигу. :( Сначала показалось, что все понял, а теперь понял, что понял не все. Можешь кое-что пояснить?

С хуком:
ls.hook.run('somefunc_hook1_name', [param1,param2], thisArg);

Понятно, что вызывается функция, привязанная к хуку, ей передаеются параметры, а thisArg — это что?

С маркером:
ls.hook.inject([ls,'ajax'], 'alert(url)');

Понятно, что вторым параметром идет код, который должен выполняться. А первым — что за массив? Для чего он?
avatar
Вадим, решил написать топик раз уж так:
livestreet.ru/blog/12333.html
avatar
Понятно, что вторым параметром идет код, который должен выполняться. А первым — что за массив? Для чего он?
в нем передается объект в котором нужно искать метод «ajax» — он его находит, потом парсит(не выполняет) на наличие нужного маркера(в примере выше без маркера, значит самое начало метода) и вставляет твой код. Т.е. никакого вызова не происходит, только парсинг метода и его переопределение.
avatar
Здравствуйте, такой вопрос
Хочу js хуком перехватить момент когда все комментарии отрисовались полностью.
«Захучид»:
— ls_comments_add_after (понадобится в будущем),
— ls_comment_inject_after (понадобится в будущем),
— ls_comments_load_after (думал здесь но не пошло),
— ls_comments_drawcomplete (попробовал сделать свой хук, который вызывается в собственном шаблоне comment_tree.tpl после последнего div-а с коментами, тоже не работает).
Подскажите в какую сторону копать
avatar
Вопрос какбы снят, но тем не менее интересно есть ли такая возможность
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.