JQuery का उपयोग करके सफारी का पता लगाएं


111

हालांकि दोनों वेबकिट आधारित ब्राउज़र हैं, सफ़ारी यूआरएल में यूआरएल के उद्धरण चिह्न लगाते हैं जबकि क्रोम नहीं करता है।

इसलिए मुझे जेएस में इन दोनों के बीच अंतर करने की आवश्यकता है।

jQuery के ब्राउज़र का पता लगाने वाले डॉक्स को "सफारी" के रूप में चिह्नित किया जाता है।

क्या कोई बेहतर तरीका है या मैं अभी के लिए हटाए गए मूल्य के साथ रहना चाहता हूं?


मुझे नहीं पता कि इसके साथ चिपकना इतना अच्छा विचार है, मैंने इसकी गहराई से जाँच नहीं की है, हालाँकि मैंने अभी क्रोम पर $ .browser डॉक्स और इसे फ़्लैग किया था $.browser.safari === true। eeek।
11'11

जवाबों:


340

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');

या केवल सफारी के लिए, इसका उपयोग करें:

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

3
साइड इफेक्ट के साथ एक फीचर डिटेक्शन के लिए 48 वोट बनाम 5 वोट के अनुपात के साथ, जाहिर है यह अनुशंसित समाधान है। :) यह उत्तर देना स्वीकार किया।
आंद्रेकेआर

1
इस प्रकार की चीज़ कितनी नाजुक होती है, इस उदाहरण के रूप में, यह कोड Internet Explorer 11 का पता नहीं लगाता है क्योंकि UA स्ट्रिंग बदल गया है। Msdn.microsoft.com/en-us/library/ie/hh869301%28v=vs.85%29.aspx
Olly Hodgson

1
एंड्रॉइड वेबव्यू भी सफारी कहेगा और यह सही नहीं है
कर्टिस

15
Chrome / Windows सफारी के रूप में रिपोर्ट करेगा:(Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36)
Blaise

6
is_explorer = (navigator.userAgent.indexOf ('MSIE') =; == -1 || navigator.appVersion.indexOf ('त्रिशूल /')> 0) भी 1111 का समर्थन करने के लिए >>> stackoverflow.com/a/22242528/2049986
जैकब वैन लिंगन

74

निम्नलिखित Safari 3.0+ की पहचान करता है और इसे Chrome से अलग करता है:

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

1
यह बात है। TNX!
यूजेन सनिक

10

दुर्भाग्यवश उपरोक्त उदाहरणों में भी सफारी के रूप में एंड्रॉइड के डिफ़ॉल्ट ब्राउज़र का पता लगाया जाएगा, जो कि यह नहीं है। मैंनें इस्तेमाल किया navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Android') == -1


7

सफारी की जाँच के लिए मैंने इसका उपयोग किया:

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

यह सही ढंग से काम करता है।


3

जाहिरा तौर पर एकमात्र विश्वसनीय और स्वीकृत समाधान इस तरह की सुविधा का पता लगाने के लिए होगा:

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;

2
अच्छी चाल है, लेकिन दुर्भाग्य से यह काम नहीं करता है। जिस तरह से लोकेशन की वजह से समानता (लोकेशन.शश == '#% 22blah% 22') काम नहीं करेगा। शश स्ट्रिंग का इलाज करता है। : /
पनोस काल।

1
फीचर का पता लगाने का तरीका है, लेकिन एक बेहतर तरीका है जिसका कोई साइड इफेक्ट नहीं है। आपका स्निपेट अन्य लिपियों के साथ हस्तक्षेप कर सकता है जो हैश परिवर्तन घटनाओं पर भरोसा करते हैं। मैं के डुप्लिकेट के रूप में चिह्नित किए गए सवाल यह । मैंने सफारी 3.0 - 5.1.3 (मैक और विंडोज) में विधि का निर्माण और परीक्षण किया है। यह एक लाइनर है :)
रोब डब्ल्यू

2

एक ही रास्ता मुझे मिल गया है अगर जाँच करें कि navigator.userAgent में iPhone या iPad शब्द है

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

1

यदि आप ब्राउज़र का उपयोग कर रहे हैं $.browser। लेकिन अगर आप फीचर सपोर्ट (अनुशंसित) की जांच कर रहे हैं तो उपयोग करें $.support

पृष्ठ पर सुविधाओं को सक्षम / अक्षम करने के लिए आपको $ .browser का उपयोग नहीं करना चाहिए। कारण यह भरोसेमंद नहीं है और आम तौर पर अनुशंसित नहीं है।

अगर आपको फीचर सपोर्ट की जरूरत है तो मैं आधुनिकीकरण की सलाह दूंगा


एक आदमी को मछली सिखाना ... "क्या कोई बेहतर तरीका है" - हाँ, सुविधा का पता लगाना।
जॉन स्ट्राइकर

आप कुछ मतलब है location.hash = '"blah"'; if (location.hash == '#%22blah%22') alert('is Safari');?
आंद्रेकेआर

@AndreKR वास्तव में, मैं उस सुविधा के लिए विशेष रूप से परीक्षण करने के लिए एक फ़ंक्शन बनाऊँगा, जिसके लिए आप जाँच कर रहे हैं।
जॉन स्ट्रिकलर

2
@Greg आप ब्राउज़र से नहीं पूछ रहे हैं .. आप ब्राउज़र का परीक्षण कर रहे हैं।
जॉन स्ट्रिकलर

12
फीचर का पता लगाना बहुत अच्छा है, लेकिन जब आप किसी विशेष ब्राउज़र को सीएसएस एनिमेशन (उदाहरण के लिए) का उपयोग करने से रोकना चाहते हैं, तो इसका क्या कारण है, क्योंकि इसमें बगिया कार्यान्वयन है? यह तकनीकी रूप से सुविधा का समर्थन करता है, लेकिन हम इसे उस ब्राउज़र के लिए अक्षम करने का निर्णय लेना चाहते हैं, क्योंकि उस उदाहरण के बिना अनुभव बेहतर है।
फिल रिकेट्स


0

इसे ठीक करने का एक बहुत ही उपयोगी तरीका है ब्राउज़र वेबकिट संस्करण का पता लगाना और यह जाँचना कि यह कम से कम हमारी ज़रूरत है या नहीं, कुछ और करें।

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.");
    };
});

यह ब्राउज़र के अलग-अलग वेबकिट कार्यान्वयन के साथ समस्याओं से निपटने के लिए एक सुरक्षित और स्थायी निर्धारण प्रदान करता है।

हैप्पी कोडिंग!


0

यह निर्धारित करेगा कि ब्राउज़र सफारी है या नहीं।

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

दुर्भाग्य से, काम नहीं करता है। Chrome v66 और Safari पर परीक्षण किया गया।
जोनाथन अर्बली

0
    // 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

0

मैं Apple ब्राउज़र इंजन का पता लगाने के लिए उपयोग करता हूं, यह सरल जावास्क्रिप्ट स्थिति है:

 navigator.vendor.startsWith('Apple')

0

जेनेरिक फंक्शन

 var getBrowseActive = function (browserName) {
   return navigator.userAgent.indexOf(browserName) > -1;
 };
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.