picture-in-picture
Version:
Picture in picture API in all browsers that support it
51 lines (45 loc) • 1.54 kB
JavaScript
module.exports = exports.default = getPip()
function getPip () {
if (typeof document === 'undefined') return { supported: false }
var video = document.createElement('video')
// Chrome
// https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture
if (document.pictureInPictureEnabled && !video.disablePictureInPicture) {
return {
supported: true,
request: function (video) {
return video.requestPictureInPicture()
},
exit: function (video) {
return document.exitPictureInPicture()
},
isActive: function (video) {
return video === document.pictureInPictureElement
}
}
}
// Safari
// https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls
if (typeof video.webkitSetPresentationMode === 'function') {
// Mobile safari says it supports webkitPresentationMode, but you can't pip there.
if (/ipad|iphone/i.test(window.navigator.userAgent)) {
return { supported: false }
}
return {
supported: true,
request: function (video) {
return video.webkitSetPresentationMode('picture-in-picture')
},
exit: function (video) {
return video.webkitSetPresentationMode('inline')
},
isActive: function (video) {
return video.webkitPresentationMode === 'picture-in-picture'
}
}
}
// No firefox JS API https://github.com/mozilla/standards-positions/issues/72
return {
supported: false
}
}