둘 다 Webkit 기반 브라우저이지만 Safari는 URL에 따옴표를 urlencode하지만 Chrome은 그렇지 않습니다.
따라서 JS에서이 둘을 구분해야합니다.
jQuery의 브라우저 감지 문서는 "safari"를 사용되지 않음으로 표시합니다.
더 나은 방법이 있습니까 아니면 지금은 사용되지 않는 값을 고수합니까?
둘 다 Webkit 기반 브라우저이지만 Safari는 URL에 따옴표를 urlencode하지만 Chrome은 그렇지 않습니다.
따라서 JS에서이 둘을 구분해야합니다.
jQuery의 브라우저 감지 문서는 "safari"를 사용되지 않음으로 표시합니다.
더 나은 방법이 있습니까 아니면 지금은 사용되지 않는 값을 고수합니까?
답변:
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');}
(Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36)
다음은 Safari 3.0 이상을 식별하고 Chrome과 구별합니다.
isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)
안타깝게도 위의 예는 Android의 기본 브라우저를 Safari로 감지하지만 그렇지 않습니다. 나는 사용했다
navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Android') == -1
Safari를 확인하기 위해 다음을 사용했습니다.
$.browser.safari = ($.browser.webkit && !(/chrome/.test(navigator.userAgent.toLowerCase())));
if ($.browser.safari) {
alert('this is safari');
}
제대로 작동합니다.
분명히 신뢰할 수 있고 허용되는 유일한 솔루션은 다음과 같은 기능 감지를 수행하는 것입니다.
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;
브라우저를 확인하는 경우 $.browser
. 그러나 기능 지원 (권장)을 확인하는 경우 $.support
.
$ .browser를 사용하여 페이지의 기능을 활성화 / 비활성화하면 안됩니다. 이유는 신뢰할 수 없으며 일반적으로 권장되지 않습니다.
기능 지원이 필요한 경우 modernizr을 권장 합니다.
location.hash = '"blah"'; if (location.hash == '#%22blah%22') alert('is Safari');
인가요?
//Check if Safari
function isSafari() {
return /^((?!chrome).)*safari/i.test(navigator.userAgent);
}
//Check if MAC
if(navigator.userAgent.indexOf('Mac')>1){
alert(isSafari());
}
이 문제를 해결하는 매우 유용한 방법은 브라우저 웹킷 버전을 감지하고 필요한 버전인지 확인하고 다른 작업을 수행하는 것입니다.
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.");
};
});
이는 브라우저의 다양한 웹킷 구현 문제를 처리하기위한 안전하고 영구적 인 수정을 제공합니다.
즐거운 코딩 되세요!
이것은 브라우저가 Safari인지 아닌지를 결정합니다.
if(navigator.userAgent.indexOf('Safari') !=-1 && navigator.userAgent.indexOf('Chrome') == -1)
{
alert(its safari);
}else {
alert('its not safari');
}
// 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
일반 기능
var getBrowseActive = function (browserName) {
return navigator.userAgent.indexOf(browserName) > -1;
};
$.browser.safari === true
. eeek.