Как мне разработать дополнение для Safari?
Вопрос
Я хочу, чтобы при каждой загрузке страницы в Safari выполнялся лично разработанный код JavaScript.Похоже, это делает addblock для Safari.Кто-нибудь знает, как это сделать?
Safari не является расширяемым.Для этого нет дополнительной структуры.Тем не менее, для него доступен блокировщик рекламы и множество других дополнений, хотя разработчики Apple Webkit и Safari отговаривают пользователей от их использования, называя их «бинарными хаками».Кажется, что некоторые из этих дополнений используют InputManager, который вообще нигде не документирован, по крайней мере, из-за того, как люди используют его для загрузки скриптов в Safari.Думаю, мне придется заняться обратным проектированием, чтобы увидеть, как addblock это делает, но прежде чем я это сделаю, я решил спросить здесь.Кто-нибудь знает?
Решение
Менеджеры ввода — это широко используемый (не)используемый способ внедрения произвольного кода в среду выполнения другого приложения.Как только вы окажетесь там, вам придется провести реверс-инжиниринг самого приложения, чтобы выяснить, как добиться желаемого поведения;обычно это включает в себя смену методов для замены частей приложения, которое вы взламываете.Это не документировано, потому что нет API для документирования, но вы можете узнать об отдельных частях (как написать диспетчер ввода в целом, как работает переключение методов в Objective C, как использовать такие инструменты, как дамп классов), а затем разместить все это вместе.
Однако то, что вы описываете, похоже на Greasemonkey, и уже существует как минимум один или два хака, позволяющих включить поведение, подобное Greasemonkey, в Safari.Я бы посоветовал сначала посмотреть, соответствует ли один из них вашим потребностям.