В Safari 10 (macOS Sierra) анонсирован режим “Picture In Picture” (на самом деле был спрятан уже и в Safari 9). Это когда онлайн-видео проигрывается не на странице, а в отдельном плавающем окне, которое расположено всегда поверх всех окон. Примерно так же, как и в iOS 9+, только должно работать для любого html5 видео в Safari (так же замечено в iTunes).
Но, чтобы запустить PiP на YouTube, нужно дважды вызвать контекстное меню (сначала появляется контекстное меню плеера youtube, затем системное, где уже есть нужная опция). На том же vimeo в плеер встраивается отдельная кнопка для PiP, но появляется она только после паузы и повторного воспроизведения. А на других сайтах вообще не удается запустить PiP таким способом.
Для решения этой проблемы кто-то создал расширение для Safari: https://github.com/arnoappenzeller/PiPifier
Оно переключает первое html5 видео на странице в режим «картинка в картинке», вот пример на VK (после этого можно переключаться в другие приложения, а видео останется перед глазами, размер окна с видео можно менять):
Но у расширения есть свои недостатки:
- Оно почему-то не работает в полноэкранном Safari
- Т.к. реализовано в виде native extension, приходится тащить вместе с расширением бесполезное приложение-пустышку, без которого расширение не работает
- На YouTube оно работает только после того как пользователь тыкнул в видео курсором (мышкой, трекпадом), отправка события клика работает, но не помогает
В общем, я запилил свой простейший вариант в виде Automator Workflow, который (automator в смысле) в очередной раз доказал свою полезность. Плюсы:
- Работает в full screen
- Можно повесить действие на горячую клавишу, так же доступно через меню Safari
- На YouTube работает без предварительного клика по видео
Инструкция:
- Скачать сервис
- Запустить, будет предложено установить его, согласиться на установку
- В настройках системы назначить какое-нибудь сочетание клавиш на переключение текущего видео в режим PiP и обратно:
Сам скрипт:
on run {input, parameters}
set pipscript to "
var video = document.querySelectorAll('video')[0];
if (video !== undefined && video.webkitSupportsPresentationMode && typeof video.webkitSetPresentationMode === 'function') {
video.webkitSetPresentationMode(video.webkitPresentationMode === 'picture-in-picture' ? 'inline' : 'picture-in-picture');
}
"
tell application "Safari"
activate
do JavaScript pipscript in document 1 # in current tab of first window
end tell
return input
end run