[javascript] Safari 브라우저 감지

JavaScript를 사용하여 Safari 브라우저를 감지하는 방법? 아래 코드를 시도했는데 Safari뿐만 아니라 Chrome 브라우저도 감지합니다.

function IsSafari() {

  var is_safari = navigator.userAgent.toLowerCase().indexOf('safari/') > -1;
  return is_safari;

}



답변

Chrome 색인을 사용하여 Chrome을 쉽게 필터링 할 수 있습니다.

var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('safari') != -1) {
  if (ua.indexOf('chrome') > -1) {
    alert("1") // Chrome
  } else {
    alert("2") // Safari
  }
}


답변

참고 : 수정하려는 특정 행동을 항상 타겟팅하지 말고 감지하십시오.isSafari?

최후의 수단 으로이 정규식으로 Safari를 감지하십시오.

var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);

부정적인 둘러보기를 사용하며 Chrome, Edge 및 Safari사용자 에이전트에 이름 을 포함하는 모든 Android 브라우저를 제외합니다 .


답변

다른 사람들이 이미 언급했듯이 기능 검색은 특정 브라우저를 확인하는 것보다 선호됩니다. 한 가지 이유는 사용자 에이전트 문자열을 변경할 수 있기 때문입니다. 또 다른 이유는 문자열이 최신 버전에서 코드를 변경하고 중단시킬 수 있기 때문입니다.

그래도 Safari 버전을 테스트하고 싶다면 이것을 사용하는 것이 좋습니다.

var isSafari = navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&
               navigator.userAgent &&
               navigator.userAgent.indexOf('CriOS') == -1 &&
               navigator.userAgent.indexOf('FxiOS') == -1;

Mac, iPhone, iPod, iPad 등 모든 장치에서 Safari의 모든 버전에서 작동합니다.

편집하다

현재 브라우저에서 테스트하려면 https://jsfiddle.net/j5hgcbm2/

편집 2

iOS에서 Chrome을 올바르게 감지 하도록 Chrome 문서 에 따라 업데이트되었습니다.

iOS의 모든 브라우저는 Safari의 래퍼 일 뿐이며 동일한 엔진을 사용한다는 점은 주목할 가치가 있습니다. 이 글에서 자신의 답변에 대한 bfred.it의 의견을 참조하십시오.

편집 3

iOS에서 Firefox를 올바르게 감지 하도록 Firefox 문서 에 따라 업데이트되었습니다.


답변

그냥 사용하십시오 :

var isSafari = window.safari !== undefined;
if (isSafari) console.log("Safari, yeah!");


답변

이 코드는 사파리 브라우저 만 감지하는 데 사용됩니다

if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0)
{
   alert("Browser is Safari");
}


답변

chrome 및 safari 용 userAgent가 거의 동일하므로 브라우저 공급 업체를보다 쉽게 ​​확인할 수 있습니다.

원정 여행

navigator.vendor ==  "Apple Computer, Inc."

크롬

navigator.vendor ==  "Google Inc."

FireFox (비어있는 이유는 무엇입니까?)

navigator.vendor ==  ""

IE (왜 정의되지 않습니까?)

navigator.vendor ==  undefined


답변

사파리 whitout 크롬 만 :

다른 코드를 시도한 후에 새롭고 오래된 버전의 Safari에서 작동하는 코드를 찾지 못했습니다.

마지막 으로이 코드가 저에게 매우 효과적입니다.

var ua = navigator.userAgent.toLowerCase();
var isSafari = false;
try {
  isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);
}
catch(err) {}
isSafari = (isSafari || ((ua.indexOf('safari') != -1)&& (!(ua.indexOf('chrome')!= -1) && (ua.indexOf('version/')!= -1))));

//test
if (isSafari)
{
  //Code for Safari Browser (Desktop and Mobile)
  document.getElementById('idbody').innerHTML = "This is Safari!";
}
else
{
  document.getElementById('idbody').innerHTML = "Not is Safari!";
}
<body id="idbody">
</body>