¿Cómo detectar el browser Safari 10 en Javascript?

Estaba usando

var isSafari = /constructor/i.test(window.HTMLElement) 

pero no funciona para el nuevo Safari 10.

¿Algún consejo sobre qué usar?

¡Gracias!

editar: ¿Cómo detectar el browser Safari, Chrome, IE, Firefox y Opera? solo cubre Safari hasta la versión 9

¿Extendí la línea de detección de safari como se menciona en Cómo detectar el browser Safari, Chrome, IE, Firefox y Opera? con lo siguiente y lo coloca al final de la list de testings:

 isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0 || !isChrome && !isOpera && window.webkitAudioContext !== undefined; 

Básicamente, verifica si la API de audio web está usando el prefijo webkit después de asegurarse de que no sea Chrome u Opera. (las versiones anteriores de Chrome y Opera también usaban este prefijo)

Fui a caniuse.com para ver qué características son compatibles con cada browser y traté de search uno que se destaca de una manera específica para Safari. Posiblemente haya otras características que podría haber utilizado. (y puede haber otros mejores).

Sé que la detección de funciones es generalmente la mejor manera, excepto que la detección de funciones no detecta si la característica está rota o da diferentes resultados dependiendo del browser.

 var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification); 

Cubrirá todas las versiones de Safari desde 3.0 y superiores.

Comtesting si hay dos desviaciones de API que prevalecen solo en Safari. En versiones anteriores a 9.1.3, el resultado .toString() del object HTMLElement es [object HTMLElementConstructor] y es exclusivo de Safari. Esto fue corregido en las versiones posteriores a 9.1.3.

Para las versiones más nuevas, verifique el [object SafariRemoteNotification] que es un tipo de object que existe solo en los browseres modernos de Safari.