Я построил расширение Safari в XCode с нуля. Основная цель состояла в том, чтобы скрыть рекомендации видео на YouTube при просмотре чего-либо - я решил, что смогу сделать это, используя некоторые свойства css.
Для целей тестирования я включил еще несколько модификаций стиля.
/* Testing */
body {
background: red !important;
color: blue !important;
}
/* Hide column with video recommendations */
#secondary {
display: none !important;
}
По некоторым причинам эти css свойства, которые я сохранил в ноздиле. css, не влияют на сайт.
Я следовал Руководству Apple при введении CSS Таблицы стилей как можно точнее, в основном путем редактирования файла Info.plist:
- Я добавил файл css в качестве ссылки в NSExtension -> SFSafariStyleSheet -> Array -> Dictionary with Key
Style Sheet
(обратите внимание на пробел) и значение nostyle.css
(файл в том же каталоге, что и «script. js», который поставляется вместе с настройкой проекта по умолчанию) - Я добавил
*.youtube.com
к список разрешенных доменов (среди прочих URL-адресов для целей тестирования)
Я получил скрипт. js файл для вывода сообщений в моей консоли, хотя и с несколько непоследовательной скоростью.
Я не т отключил любые другие файлы (кроме того, что я добавил несколько иконок в Assets.xcassets
). Ниже приведено полное содержимое моего файла Info.plist в папке Extension . Он также содержит элемент панели инструментов (SFSafariToolbarItem
), который отображается в строке меню в Safari, но ничего не делает при нажатии (как и предполагалось).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>DistractionFreeYouTube Extension</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSExtension</key>
<dict>
<key>SFSafariStyleSheet</key>
<array>
<dict>
<key>Style Sheet</key>
<string>nostyle.css</string>
</dict>
</array>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.Safari.extension</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).SafariExtensionHandler</string>
<key>SFSafariContentScript</key>
<array>
<dict>
<key>Script</key>
<string>script.js</string>
</dict>
</array>
<key>SFSafariToolbarItem</key>
<dict>
<key>Action</key>
<string>Command</string>
<key>Identifier</key>
<string>Button</string>
<key>Image</key>
<string>ToolbarItemIcon.pdf</string>
<key>Label</key>
<string>Distraction Free</string>
</dict>
<key>SFSafariWebsiteAccess</key>
<dict>
<key>Allowed Domains</key>
<array>
<string>*.youtube.com</string>
</array>
<key>Level</key>
<string>Some</string>
</dict>
</dict>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2020 (my name). All rights reserved.</string>
<key>NSHumanReadableDescription</key>
<string>This extension hides the column of recommended videos when watching YouTube videos.</string>
</dict>
</plist>
Вот снимок экрана моего рабочего пространства.
![XCode workspace, Info.plist is open](https://i.stack.imgur.com/Ip2QK.jpg)