Я нахожусь в процессе создания моего первого расширения Safari - очень простого - но я столкнулся с парой проблем. Расширение сводится к одному внедренному сценарию, который пытается обойти встроенный обработчик каналов и перенаправить на http://URI. Мои проблемы на данный момент имеют два аспекта:
- "Белый список" работает не так, как я ожидал. Так как все каналы отображаются по протоколу "feed://", я попытался зафиксировать это в белом списке как "feed://*/*" (в чёрном списке ничего нет), но в итоге получаю запрос цикл, который я не могу понять. Если я установлю значения в черном списке " http://*/* " и " https://*/* ", все будет работать как положено.
- Я не могу понять, как получить доступ к моим настройкам из моего скрипта. Сценарий создает
beforeload
событияbeforeload
, но не может получить доступ к моим настройкам, используя путьsafari.extension.settings
указанный в документации.
В документации Apple я не нашел ничего, что указывало бы на то, что настройки не должны быть доступны из моего скрипта. Поскольку расширения являются такой новой функцией, даже Google возвращает ограниченные релевантные результаты, и большинство из них из официальной документации.
Что мне не хватает?
ОБНОВЛЕНИЕ Итак, я надеюсь, что документация неполная, потому что она ужасна, но я немного узнал о настройках. Оказывается, что из сценариев SafariExtensionSettings
объект SafariExtensionSettings
недоступен. Инъекционные сценарии имеют доступ только к объекту SafariContentExtension
(который вообще бесполезен), но он имеет псевдоним точно таким же образом (safari.extension.settings
) --bad, IMO. Как указано в документации сценария внедрения:
Важное замечание: Когда вы используете safari.extension из внедренного скрипта, вы не обращаетесь к классу SafariExtension. Вы обращаетесь к классу SafariContentExtension.
Вы должны использовать систему обмена сообщениями для общения с глобальным HTML файлом, который имеет доступ к настройкам. Это зацикливается, но у меня есть сообщение, отправленное в файл global.html
который извлекает настройки и отправит сообщение обратно в мой сценарий внедрения, как только я пойму, как это сделать.
Поскольку я выполняю всю свою работу до загрузки документа, все методы, которые я нашел для отправки сообщения, основаны на объекте страницы, которого у меня нет.