JQuery ব্যবহার করে সাফারি সনাক্ত করুন


111

যদিও উভয়ই ওয়েবকিট ভিত্তিক ব্রাউজার, ক্রোম না থাকা অবস্থায় সাফারি ইউরাইনকোডের উদ্ধৃতি চিহ্নটি ইউআরএলটিতে চিহ্নিত করে।

অতএব জেএস-এ আমার এই দুটিয়ের মধ্যে পার্থক্য করা দরকার

jQuery এর ব্রাউজার সনাক্তকরণ ডক্স "সাফারি" অবচিত হিসাবে চিহ্নিত করেছে।

এর চেয়ে ভাল কোন পদ্ধতি আছে বা আমি কি আপাতত অবহেলিত মানটির সাথে লেগে আছি?


আমি জানি না এটির সাথে লেগে থাকা যদি খুব ভাল ধারণা হয় তবে আমি এটিকে গভীরভাবে পরীক্ষা করে দেখিনি, যদিও আমি কেবল ক্রোমের on। ব্রাউজার ডক্সটিতে ব্রাউজ করেছি এবং এটি পতাকাঙ্কিত $.browser.safari === true। eeek।
ডেভিন

উত্তর:


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 ভোটের অনুপাত সহ, স্পষ্টতই এটি প্রস্তাবিত সমাধান। :) এটি গ্রহণযোগ্য উত্তর করা।
AndreKR

1
এই ধরণের জিনিসটি কতটা নাজুকের উদাহরণ হিসাবে, এই কোডটি ইন্টারনেট এক্সপ্লোরার 11 সনাক্ত করে না কারণ ইউএ স্ট্রিং পরিবর্তিত হয়েছে। দেখুন msdn.microsoft.com/en-us/library/ie/hh869301%28v=vs.85%29.aspx
Olly হজসন

1
অ্যান্ড্রয়েড ওয়েবভিউ এছাড়াও সাফারি বলবে এবং এটি সঠিক নয়
কার্টিস

15
: ক্রোম / উইন্ডোজ সাফারি যেমন রিপোর্ট হবে(Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36)
ব্লেইস

6
is_explorer = (নেভিগেটর.উজারএজেন্ট.ইন্ডেক্সঅফ ('এমএসআইই')! == -1 || নেভিগেটর.এপ ভার্সন.ইন্ডেক্সফ ('ট্রাইডেন্ট /')> 0) আইই 11 সমর্থন করার জন্য >>> স্ট্যাকওভারফ্লো.com/a/22242528/ 2049986
জ্যাকব ভ্যান লিনজেন

74

নিম্নলিখিতটি সাফারি 3.0+ সনাক্ত করে এবং এটি ক্রোম থেকে পৃথক করে:

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
দুর্দান্ত কৌশল, কিন্তু দুর্ভাগ্যক্রমে এটি কার্যকর হয় না। সমতা (অবস্থান.hash == '#% 22blah% 22') লোকেশন.হ্যাশ স্ট্রিংয়ের সাথে আচরণ করে বলে কাজ করবে না। : /
প্যানোস কাল

1
বৈশিষ্ট্য সনাক্তকরণ হ'ল উপায়, তবে এর থেকে আরও ভাল পদ্ধতি রয়েছে যার কোনও পার্শ্ব প্রতিক্রিয়া নেই। আপনার স্নিপেট অন্যান্য স্ক্রিপ্টগুলির সাথে হস্তক্ষেপ করতে পারে যা হ্যাশ পরিবর্তন ইভেন্টগুলিতে নির্ভর করে। আমি সদৃশ হিসাবে প্রশ্ন চিহ্নিত করেছেন এই । আমি সাফারি 3.0 - 5.1.3 (ম্যাক এবং উইন্ডোজ) এ পদ্ধতিটি তৈরি এবং পরীক্ষা করেছি। এটি একটি ওয়ানলাইনার :)
রব ডব্লু

2

আমি খুঁজে পাওয়া একমাত্র উপায় নেভিগেটর.ইউসারএজেন্টে আইফোন বা আইপ্যাড শব্দ রয়েছে কিনা তা পরীক্ষা করা হবে

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

1

আপনি যদি ব্রাউজার ব্যবহার পরীক্ষা করে থাকেন $.browser। তবে আপনি যদি বৈশিষ্ট্য সমর্থন পরীক্ষা করে থাকেন (প্রস্তাবিত) তবে ব্যবহার করুন $.support

পৃষ্ঠায় বৈশিষ্ট্যগুলি সক্ষম / অক্ষম করতে আপনার ব্রাউজার ব্যবহার করা উচিত নয়। এটি নির্ভরযোগ্য না হওয়ার কারণ এবং সাধারণত কেবল সুপারিশ করা হয় না।

আপনার যদি ফিচার সাপোর্টের দরকার হয় তবে আমি মডার্নজারকে সুপারিশ করি ।


একজন মানুষকে মাছ শিখিয়ে দিন ... "এর চেয়ে আরও ভাল পদ্ধতি আছে কি" - হ্যাঁ, বৈশিষ্ট্য সনাক্তকরণ।
জন স্ট্রিকলার

আপনি কিছু মানে location.hash = '"blah"'; if (location.hash == '#%22blah%22') alert('is Safari');?
AndreKR

@ আন্দ্রে কেআর হুবহু, আপনি যে বৈশিষ্ট্যটির জন্য যাচ্ছেন তার জন্য বিশেষভাবে পরীক্ষা করার জন্য আমি একটি ফাংশন করব।
জন স্ট্রিকলার

2
@ গ্রেগ আপনি ব্রাউজারটি জিজ্ঞাসা করছেন না .. আপনি ব্রাউজারটি পরীক্ষা করছেন।
জন স্ট্রিকলার

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

দুর্ভাগ্যক্রমে কাজ করে না। ক্রোম ভি 66 এবং সাফারিতে পরীক্ষিত।
জোনাথন আরবেলি

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

জেনেরিক ফাংশন

 var getBrowseActive = function (browserName) {
   return navigator.userAgent.indexOf(browserName) > -1;
 };
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.