Как вызвать функцию Greasemonkey при нажатии на ссылку JavaScript

Поэтому недавно я начал работать над скриптами Greasemonkey, не имея большого опыта работы с JavaScript. Все шло хорошо, пока я не наткнулся на этот блокпост.

Я пишу скрипт для страницы с небольшой таблицей информации. Если щелкнуть ссылку внизу, таблица полностью развернется на странице, чтобы отобразить всю информацию. Когда это происходит, мне нужно вызвать функцию в Greasemonkey, однако ссылка не имеет идентификатора или чего-либо, на что я могу сослаться, чтобы посмотреть ее. Это просто:

<a href="javascript: expandFullTable(false);"></a>

При нажатии таблица расширяется и отображается как истинная. Первоначально я использовал следующее, чтобы расширить таблицу при загрузке страницы, но это сломало несколько вещей:

window.location.href = ('javascript: expandFullTable(false)');

Я пытался использовать «щелчок», «onclick» и даже «mouseover», чтобы Greasemonkey обнаруживал, когда он нажат, но, похоже, ничего не работает. Из того, что я могу сказать, это просто ссылка, которая вызывает функцию, но после некоторых значительных поисков я не смог ничего узнать о том, как ссылаться на нее в моем сценарии. Я уверен, что это невероятно просто, но это меня безмерно расстроило.


person Chris B.    schedule 12.10.2014    source источник
comment
обычно может ориентироваться на элемент с помощью jQuery, используя метод обхода, основанный на известных родителях в DOM. Если не в худшем случае, можно настроить таргетинг на href, показанный в качестве селектора.   -  person charlietfl    schedule 13.10.2014


Ответы (1)


Вы можете захватить функцию следующим образом:

var oldExpandFullTable = unsafeWindow.expandFullTable;
unsafeWindow.expandFullTable = function() {
    // Do something
    alert("You clicked on that thing!");

    // Call the original function
    oldExpandFullTable.apply(this, arguments);
};

Но так как вы пометили этот тег jquery, это должно позволить вам получить связь:

var link = $("a[href^=\"javascript: expandFullTable\"]);

Это должно работать, если jQuery внедряется в ваш скрипт с помощью @require. Если он уже есть на странице, вы можете добавить это перед доступом к нему: var $ = unsafeWindow.jQuery;.

Кстати, возможно, вам стоит узнать больше о unsafeWindow, чтобы избежать дыр в безопасности.

person Lucas Trzesniewski    schedule 12.10.2014