3

Я пишу достаточно сложное расширение браузера для Chrome, Firefox & Safari.Условно загрузить сценарий содержимого в расширение Safari, например, в FF/Chrome?

В Chrome & Firefox, я могу указать, какой сценарий содержимого вводится на какие сайты на основе соответствия URL.

Safari не предлагает каких-либо таких (мелкозернистых) функциональных возможностей - они разрешают только один белый/черный список для всех сайтов.

Есть ли способ сделать это? Если нет, как я могу условно загрузить файл Javascript? (учитывая, что я не могу добавить их в DOM).

Я пробовал yepnope, но он присоединяется к DOM.

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

ответ

9

safari.extension.addContentScript и safari.extension.addContentScriptFromURL позволяют программно вставлять скрипты. Вы можете использовать эти методы на своей глобальной странице, на расширении или на панели расширения. Для обоих методов, аргументы:

  • скрипт, чтобы ввести (в виде строки или в виде URL, соответственно),
  • белый список шаблонов URL, чтобы соответствовать страницы, на которых можно вводить сценарий,
  • черный список, чтобы исключить страницы, и
  • boolean для того, нужно ли вставлять скрипт в качестве конечного скрипта (или как сценарий запуска).

См. this page в справочнике по расширению Safari.

Обратите внимание, что белый список и черный список используют формат шаблона URL, который похож (но не идентичен) на подстановочные знаки UNIX и не настолько эффективен, как регулярные выражения. Этот формат шаблона описан в нижней части this page.

+0

спасибо. Не могу поверить, что я не мог этого найти. –

3

Принимаемый ответ правильный, но важно отметить, что вы не можете программно вставлять скрипты в открытые в настоящее время вкладки, такие как Chrome и Firefox. В SafariExtension Class Reference состояния:

Добавление и удаление таблиц стилей и скриптов. Добавление или удаление таблицы стилей содержимого немедленно применяется к страницам. Добавление или удаление скрипта содержимого применяется только к страницам, открытым или перезагруженным после этой точки. Удаление таблицы стилей или скрипта, находящегося в файле Info.plist, удаляет его только из текущего сеанса браузера.

Из-за этого ограничения, часто легче просто полагаться на атрибут Scripts в Info.plist вместо.

+0

Но разве 'Info.plist'« один белый/черный список », о котором опасался OP? – Teepeemm

+0

Действительно, @Teepeemm. Я хотел бы четко указать, что 'addContentScript' и' addContentScriptFromURL' имеют серьезное ограничение неспособности повлиять на открытые вкладки. Я (и, по-видимому, другие) наткнулся на этот вопрос, думая, что он допускает истинную динамическую нагрузку. –