Обнаружение Safari с помощью jQuery

Хотя оба браузера основаны на Webkit, Safari urlencodes кавычки в URL-адресе пока Chrome не делает.

Поэтому мне нужно различать эти два в JS.

jQuery для обнаружения браузера отмечают "сафари" как устаревшие.

Есть ли лучший способ или я просто придерживаюсь устаревшего значения?

Ответ 1

Использование сочетания feature detection и строки Useragent:

    var is_opera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
    var is_Edge = navigator.userAgent.indexOf("Edge") > -1;
    var is_chrome = !!window.chrome && !is_opera && !is_Edge;
    var is_explorer= typeof document !== 'undefined' && !!document.documentMode && !is_Edge;
    var is_firefox = typeof window.InstallTrigger !== 'undefined';
    var is_safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);

Использование:
if (is_safari) alert('Safari');

Или только для Safari, используйте это:

if ( /^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {alert('Its Safari');}

Ответ 2

Ниже указано Safari 3.0+ и отличает его от Chrome:

isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)

Ответ 3

К сожалению, приведенные выше примеры также будут определять браузер Android по умолчанию как Safari, а это не так. я использовал navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Android') == -1

Ответ 4

Для проверки Safari я использовал это:

$.browser.safari = ($.browser.webkit && !(/chrome/.test(navigator.userAgent.toLowerCase())));
if ($.browser.safari) {
    alert('this is safari');
}

Он работает правильно.

Ответ 5

По-видимому, единственным надежным и приемлемым решением было бы сделать обнаружение функции следующим образом:

browser_treats_urls_like_safari_does = false;
var last_location_hash = location.hash;
location.hash = '"blah"';
if (location.hash == '#%22blah%22')
    browser_treats_urls_like_safari_does = true;
location.hash = last_location_hash;

Ответ 6

Единственный способ, которым я нашел, - проверить, содержит ли navigator.userAgent слово iPhone или iPad

if (navigator.userAgent.toLowerCase().match(/(ipad|iphone)/)) {
    //is safari
}

Ответ 7

Если вы проверяете браузер, используйте $.browser. Но если вы проверяете поддержку функций (рекомендуется), используйте $.support.

Вы не должны использовать $.browser для включения/отключения функций на странице. Причина в том, что она не надежна и вообще не рекомендуется.

Если вам нужна поддержка функций, я рекомендую modernizr.

Ответ 8

Общая ФУНКЦИЯ

 var getBrowseActive = function (browserName) {
   return navigator.userAgent.indexOf(browserName) > -1;
 };

Ответ 9

Очень полезный способ исправить это - обнаружить версию веб-браузера браузеров и проверить, по крайней мере тот, который нам нужен, иначе сделайте что-то еще.

Использование jQuery выполняется следующим образом:

"use strict";

$(document).ready(function() {
    var appVersion                  = navigator.appVersion;
    var webkitVersion_positionStart = appVersion.indexOf("AppleWebKit/") + 12;
    var webkitVersion_positionEnd   = webkitVersion_positionStart + 3;
    var webkitVersion               = appVersion.slice(webkitVersion_positionStart, webkitVersion_positionEnd);
	
    console.log(webkitVersion);

    if (webkitVersion < 537) {
        console.log("webkit outdated.");
    } else {
        console.log("webkit ok.");
    };
});

Ответ 10

//Check if Safari
  function isSafari() {
      return /^((?!chrome).)*safari/i.test(navigator.userAgent);
  }
//Check if MAC
     if(navigator.userAgent.indexOf('Mac')>1){
        alert(isSafari());
     }

http://jsfiddle.net/s1o943gb/10/

Ответ 11

Это определит, является ли браузер Safari или нет.

if(navigator.userAgent.indexOf('Safari') !=-1 && navigator.userAgent.indexOf('Chrome') == -1)
{
    alert(its safari);
}else {
    alert('its not safari');
}

Ответ 12

    // Safari uses pre-calculated pixels, so use this feature to detect Safari
    var canva = document.createElement('canvas');
    var ctx = canva.getContext("2d");
    var img = ctx.getImageData(0, 0, 1, 1);
    var pix = img.data;     // byte array, rgba
    var isSafari = (pix[3] != 0);   // alpha in Safari is not zero

Ответ 13

Я использую, чтобы обнаружить движок браузера Apple, это простое условие JavaScript:

 navigator.vendor.startsWith('Apple')