ตรวจหาเบราว์เซอร์ Safari


155

จะตรวจหาเบราว์เซอร์ Safari โดยใช้ JavaScript ได้อย่างไร? ฉันได้ลองใช้รหัสด้านล่างและตรวจพบไม่เพียง แต่ Safari เท่านั้น แต่ยังรวมถึงเบราว์เซอร์ Chrome ด้วย

function IsSafari() {

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

}

1
โค้ด JS บางส่วนที่เกี่ยวข้องกับการส่งไฟล์สำหรับ Safari สำหรับ Chrome ทำงานได้ดี
Tomas

1
คุณควรจะทดสอบความแตกต่างของ API ที่มีอยู่ มีเบราว์เซอร์ที่ใช้ WebKit อื่น ๆ นอกเหนือจาก Safari และ Chrome
Quentin

12
มีสาเหตุหลายประการที่อาจต้องการตรวจหาเบราว์เซอร์ ตัวอย่างเช่นในขณะที่เขียนลักษณะบางอย่างของเอ็นจิ้น SVG เช่นตัวกรองเสียใน Safari แต่ทำงานใน Chrome
Paul Legato

บางครั้งคุณไม่สามารถแก้ไขข้อบกพร่องได้เพราะคุณไม่สามารถสร้างซ้ำได้ (ฉันไม่มีสิทธิ์เข้าถึง Mac) ฉันแก้ไขปัญหาเกี่ยวกับ Midori (ปัญหา BlobBuilder / Blob บางอย่างสำหรับ shim sendAsBinary) แต่ลูกค้าบอกว่ายังมีปัญหากับการอัปโหลดไฟล์ดังนั้นสิ่งที่ดีที่สุดที่ฉันคิดได้ก็คือการลบการรองรับ Safari และใช้ iframe สำหรับมัน (สำหรับ IE เก่า)
llamerr

คำตอบ:


114

คุณสามารถใช้ดัชนีของ Chrome เพื่อกรอง Chrome ออกได้อย่างง่ายดาย:

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

6
ไม่ทำงาน กำลังส่งออกสตริง chrome UA บน iPhone และไม่มีแม้แต่คำว่า "chrome" อยู่ในนั้น
Paul Carlton

7
สตริง IE 11 UA ใน Windows 10 ยังมี Safari และ Chrome
cuixiping

20
@Flimm มีกรณีการใช้งานที่ถูกต้องมากมายสำหรับการตรวจจับเบราว์เซอร์ อย่าถือว่ารู้เจตนาของผู้ถามหรือผู้ตอบ แม้ว่าจะเป็นการดีที่จะรวมเคล็ดลับที่เป็นประโยชน์ที่คุณอาจเชื่อว่าเกี่ยวข้อง แต่ก็ไม่ได้เป็นข้อกำหนด
Ruben Martinez Jr.

1
สิ่งนี้ใช้ไม่ได้กับเบราว์เซอร์ Android ซึ่งรวมถึง "ซาฟารี" แต่ไม่ใช่ "chrome": developers.whatismybrowser.com/useragents/explore/software_name/…
Eric Andrew Lewis

1
ลดลงเป็นวิธีแก้ปัญหาที่ไม่น่าเชื่อถือ - คำตอบที่ดีกว่าด้านล่าง
Oli C

164

หมายเหตุ:พยายามตรวจหาพฤติกรรมเฉพาะที่คุณพยายามแก้ไขเสมอแทนที่จะกำหนดเป้าหมายด้วยisSafari?

เป็นทางเลือกสุดท้ายให้ตรวจหา Safari ด้วย regex นี้:

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

มันใช้ มองรอบด้านในเชิงลบและไม่รวมเบราว์เซอร์ Chrome, Edge และ Android ทั้งหมดที่มีSafariชื่อใน User Agent


2
วิธีนี้ใช้ไม่ได้ ฉันยังคงเป็นจริงถ้าฉันใช้เบราว์เซอร์ Chrome บน iPhone
ayjay

29
นั่นเป็นเพราะเบราว์เซอร์ทั้งหมดบน iOS เป็นเพียงเครื่องห่อหุ้มสำหรับ Safari (ยกเว้น Opera Mini ในโหมดMini ) รวมถึง Chrome ไม่จำเป็นต้องหมายความว่าทั้งหมดจะตรงกับการทดสอบนี้เนื่องจากสตริง userAgent ขึ้นอยู่กับ wrapper คุณอาจต้องการตรวจจับ Chrome บน iOSแยกกัน
อิสระ

เพื่อนนี้ได้ผลสำหรับฉัน !!! ขอบคุณตัน .. navigator.userAgent ส่งคืนค่าเช่น "5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML เช่น Gecko) Chrome / 39.0.2171.99 Safari / 537.36" สำหรับทั้ง Chrome ใน Windows และ Safari ใน Mac
KaustubhSV

2
แก้ไขแล้ว คุณพูดถูกปัญหาของเบราว์เซอร์จำนวนมากคือพวกเขามีชื่ออื่น ๆ เพื่อพยายามไม่ให้ถูกทิ้งไว้ Like Edge มีทั้ง Chrome และ Safari ใน UA การตรวจสอบตัวแทนผู้ใช้ไม่ดีด้วยเหตุผลนี้: เบราว์เซอร์เปลี่ยนไปและต้องอัปเดตการตรวจสอบ น่าเสียดายที่ไม่มีวิธีที่สมบูรณ์แบบในการตรวจจับเบราว์เซอร์ แต่ก็เป็นการคาดเดาเสมอ
อิสระ

1
เป็นความคิดที่ดีที่จะใช้การตรวจจับคุณสมบัติ แต่พฤติกรรมบางอย่างนั้นยากหรือแทบจะเป็นไปไม่ได้เลยที่จะทดสอบตัวอย่างเช่นว่าวิดีโอบนมือถือเป็นแบบเต็มหน้าจอโดยอัตโนมัติหรือไม่สิ่งที่เกิดขึ้นบน iPhone และ iPod เท่านั้น ในการทดสอบคุณต้องโหลดวิดีโอและให้ผู้ใช้เล่น
fregante

96

ตามที่คนอื่น ๆ ได้กล่าวไว้แล้วการตรวจหาคุณสมบัติจึงเป็นที่ต้องการมากกว่าการตรวจสอบเบราว์เซอร์เฉพาะ สาเหตุหนึ่งคือสามารถเปลี่ยนแปลงสตริงตัวแทนผู้ใช้ได้ อีกสาเหตุหนึ่งคือสตริงอาจเปลี่ยนแปลงและทำลายรหัสของคุณในเวอร์ชันที่ใหม่กว่า

หากคุณยังต้องการทำและทดสอบ Safari เวอร์ชันใด ๆ ฉันขอแนะนำให้ใช้สิ่งนี้

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

สิ่งนี้จะใช้ได้กับ Safari ทุกเวอร์ชันในทุกอุปกรณ์: Mac, iPhone, iPod, iPad

แก้ไข

หากต้องการทดสอบในเบราว์เซอร์ปัจจุบันของคุณ: https://jsfiddle.net/j5hgcbm2/

แก้ไข 2

อัปเดตตามเอกสาร Chromeเพื่อตรวจจับ Chrome บน iOS อย่างถูกต้อง

เป็นที่น่าสังเกตว่าเบราว์เซอร์ทั้งหมดบน iOS เป็นเพียงเครื่องห่อสำหรับ Safari และใช้เอ็นจิ้นเดียวกัน ดูความคิดเห็นของ bfred.it เกี่ยวกับคำตอบของเขาเองในหัวข้อนี้

แก้ไข 3

อัปเดตตามเอกสารของ Firefoxเพื่อตรวจจับ Firefox บน iOS อย่างถูกต้อง


ขอบคุณสำหรับความคิดเห็น - อัปเดตเพื่อตรวจจับ Chrome บน iOS อย่างถูกต้อง
qingu

@qingu - ฉันไม่เข้าใจ javascript นี้ฉันจะทำสิ่งต่างๆได้อย่างไร - if (safaribrowser) {do this} else {do ​​that} โดยใช้รหัสเดียวกันค่าคือ 'var isSafari' ขอบคุณ
GAV

@GAV: isSafariจะอยู่trueในเบราว์เซอร์ Safari ไม่falseเช่นนั้น คุณสามารถใช้ตัวอย่างข้อมูลด้านบนจากนั้นใช้ของคุณเกือบเท่าที่คุณโพสต์ไว้ if (isSafari) { do_this(); } else { do_that(); }.
qingu

2
น่าเสียดายที่มีเหตุผลมากกว่าที่จะพยายามหาเบราว์เซอร์มากกว่าการตรวจจับคุณลักษณะ เบราว์เซอร์สามารถรองรับคุณลักษณะได้ แต่มีข้อบกพร่อง (เช่นข้อผิดพลาดของผ้าใบใน IE10 แต่คุณลักษณะเดียวกันนี้ใช้ได้ใน IE9) Firefox ยังทำงานแตกต่างจากเบราว์เซอร์ที่ใช้ webkit เช่นการตอบสนองต่อการเคลื่อนไหวของเมาส์ Safari ของ Apple มีจุดบกพร่องในการรีโฟลว์ที่ไม่มีใน Chrome เบราว์เซอร์บางตัวยังมีประสิทธิภาพในการทำงานบางอย่างที่ต้องใช้การคำนวณมากกว่าตัวอื่น ๆ
DemiImp

2
@Andras สำหรับ Firefox คุณสามารถเพิ่มสิ่งที่&& !navigator.userAgent.match('FxiOS')คล้ายกับการตรวจสอบ Chrome ได้ - อ้างอิง ( developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/… )
Petri Pellinen

72

เพียงใช้:

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

15
ไม่แน่ใจว่าทำไมถึงไม่สูงขึ้น - นี่สมบูรณ์แบบสั้นและเรียบง่าย getUserMediaฉันต้องการที่จะออกกฎซาฟารีสก์ท็อปสำหรับการขาดของ
Stephen Tetreault

3
นี่เป็นวิธีที่สมบูรณ์แบบในการกำหนดซาฟารีเดสก์ท็อปเนื่องจากไม่สามารถใช้งานได้บนมือถือ
godblessstrawberry

Safari เวอร์ชันใดใช้งานได้ ดูเหมือนจะไม่ทำงานสำหรับ v5.1.7
ElliotSchmelliot

หากคุณสนใจเฉพาะเบราว์เซอร์ไม่ใช่มือถือเทียบกับเดสก์ท็อปสิ่งนี้จะทำงานได้อย่างสมบูรณ์แบบ
Antuan

1
สิ่งนี้ใช้ไม่ได้ใน iPhone 11 Pro Max Simulator 13.5
Christian Valentin

22

รหัสนี้ใช้เพื่อตรวจจับเฉพาะเบราว์เซอร์ซาฟารี

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

4
รหัสนี้ตรวจพบเฉพาะเบราว์เซอร์ webkit ไม่ใช่ chrome เบราว์เซอร์อื่น ๆ จำนวนมากมีแนวคิดที่ไม่ดีในการรวม "ซาฟารี" ไว้ในสตริงตัวแทนผู้ใช้ของตน ตัวอย่างเช่น Opera: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36 OPR/24.0.1558.51 (Edition Next)หรือ Stock Android browser:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24
rupps

การตรวจจับแพลตฟอร์มการโยนอาจกรองกรณีความเข้ากันได้ที่เฉพาะเจาะจงออกไป
ljgww

ฉันเพิ่งตรวจสอบเบราว์เซอร์ iOS ของบุคคลที่สามครึ่งโหลพวกเขาทั้งหมดปลอมแปลง Safari User-Agent ที่แน่นอนมาก
Mitch Match

ดังนั้นสิ่งนี้จะตรวจพบ Chrome เท่านั้น แต่ฉันเพิ่งพบว่า Chrome 44 ไม่มี Chrome ใน UA อีกต่อไป แต่เป็น 'CriOS' แทน :(
Mitch Match

เราควรพยายามตรวจจับคุณลักษณะอยู่เสมอและใช้การตรวจจับเบราว์เซอร์เป็นทางเลือกสุดท้ายเนื่องจากอย่างหลังมีแนวโน้มที่จะทำลายและบล็อกผู้ใช้ที่ถูกต้องตามกฎหมายได้มากกว่า คำตอบใด ๆ ที่ไม่ได้กล่าวถึงการตรวจจับคุณสมบัติเลยคือการโหวตลดลงจากฉัน
Flimm

13

เนื่องจาก userAgent สำหรับ chrome และ safari ใกล้เคียงกันจึงสามารถดูผู้จำหน่ายเบราว์เซอร์ได้ง่ายกว่า

Safari

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

โครเมียม

navigator.vendor ==  "Google Inc."

FireFox (ทำไมถึงว่างเปล่า?)

navigator.vendor ==  ""

IE (ทำไมถึงไม่ได้กำหนด?)

navigator.vendor ==  undefined

1
ฉันกำลังมองหาบางอย่างเพื่อปิดใช้งานข้อความเตือนในซาฟารีในที่ทำงานบนคอมพิวเตอร์หลายเครื่อง (เดสก์ท็อป Mac, ไอแพด ฯลฯ ) และสิ่งนี้ก็ทำงานได้อย่างสมบูรณ์
dylnmc

แต่ผู้จำหน่าย Chrome บน iOS ก็จะเป็น "Apple Computer, Inc. " เช่นกัน ขออภัย ...
Piotr Kowalski

@PiotrKowalski - คุณไปกับโซลูชันใด
tylerlindell

@tylerlindell ดูคำตอบของฉันที่ด้านล่างของหน้านี้พร้อมคำว่า "เวอร์ชัน"
Piotr Kowalski

1
สิ่งนี้ล้มเหลวสำหรับรุ่น edge ที่ใช้ chrome!
Qiulang

7

เฉพาะSafariยกเว้น Chrome:

หลังจากลองใช้รหัสอื่นแล้วฉันไม่พบสิ่งใดที่ใช้ได้กับ 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>


7

ฉันไม่รู้ว่าทำไม OP ถึงต้องการตรวจจับ Safari แต่ในกรณีที่หายากคุณต้องใช้เบราว์เซอร์ในการดมกลิ่นในปัจจุบันการตรวจจับเอนจิ้นการเรนเดอร์มีความสำคัญมากกว่าชื่อของเบราว์เซอร์ ตัวอย่างเช่นบน iOS เบราว์เซอร์ทั้งหมดใช้เครื่องมือ Safari / Webkit ดังนั้นจึงไม่มีประโยชน์ที่จะเรียก "chrome" หรือ "firefox" เป็นชื่อเบราว์เซอร์หากตัวแสดงผลที่เป็นพื้นฐานนั้นเป็น Safari / Webkit ฉันไม่ได้ทดสอบโค้ดนี้กับเบราว์เซอร์รุ่นเก่า แต่ใช้งานได้กับทุกสิ่งที่ค่อนข้างล่าสุดบน Android, iOS, OS X, Windows และ Linux

<script>
    let browserName = "";

    if(navigator.vendor.match(/google/i)) {
        browserName = 'chrome/blink';
    }
    else if(navigator.vendor.match(/apple/i)) {
        browserName = 'safari/webkit';
    }
    else if(navigator.userAgent.match(/firefox\//i)) {
        browserName = 'firefox/gecko';
    }
    else if(navigator.userAgent.match(/edge\//i)) {
        browserName = 'edge/edgehtml';
    }
    else if(navigator.userAgent.match(/trident\//i)) {
        browserName = 'ie/trident';
    }
    else
    {
        browserName = navigator.userAgent + "\n" + navigator.vendor;
    }
    alert(browserName);
</script>

ชี้แจง:

  • เบราว์เซอร์ทั้งหมดภายใต้ iOS จะรายงานเป็น "safari / webkit"
  • เบราว์เซอร์ทั้งหมดใน Android แต่ Firefox จะรายงานว่า "chrome / blink"
  • Chrome, Opera, Blisk, Vivaldi ฯลฯ ทั้งหมดจะถูกรายงานเป็น "chrome / blink" ใน Windows, OS X หรือ Linux

IE เวอร์ชันเก่ามีสตริง MSIE ไม่ใช่ตรีศูล บางครั้ง edge หายไป e สุดท้ายในขอบคำ คุณต้องค้นหา edg
PHP Guru

นี่ควรเป็นคำตอบใหม่ที่ได้รับการยอมรับขอบคุณคริสโตเฟอร์
Myndex

5

ฉันใช้สิ่งนี้

function getBrowserName() {
    var name = "Unknown";
    if(navigator.userAgent.indexOf("MSIE")!=-1){
        name = "MSIE";
    }
    else if(navigator.userAgent.indexOf("Firefox")!=-1){
        name = "Firefox";
    }
    else if(navigator.userAgent.indexOf("Opera")!=-1){
        name = "Opera";
    }
    else if(navigator.userAgent.indexOf("Chrome") != -1){
        name = "Chrome";
    }
    else if(navigator.userAgent.indexOf("Safari")!=-1){
        name = "Safari";
    }
    return name;   
}

if( getBrowserName() == "Safari" ){
    alert("You are using Safari");
}else{
    alert("You are surfing on " + getBrowserName(name));
}

5

ฉันสังเกตว่ามีเพียงคำเดียวเท่านั้นที่ทำให้ Safari - "เวอร์ชัน" แตกต่าง ดังนั้น regex นี้จะทำงานได้อย่างสมบูรณ์แบบ:

/.*Version.*Safari.*/.test(navigator.userAgent)

4

คำตอบที่ง่ายที่สุด:

function isSafari() {
 if (navigator.vendor.match(/[Aa]+pple/g).length > 0 ) 
   return true; 
 return false;
}

3
ใช้งานได้แม้ว่าจะทำได้ง่ายกว่านี้โดยไม่ต้องใช้ regexp:navigator.vendor.toLowerCase().indexOf('apple') > -1
fviktor

5
แม้ง่าย if (navigator.vendor.match(/apple/i)) { ... }...
Brad

สิ่งนี้ใช้ไม่ได้กับ ios 13.3.1 บน Firefox เนื่องจากแสดง Apple Computer, inc
chrizonline

1
@nuttynibbles: นี่อาจเป็นสิ่งที่คุณต้องการเพราะทุกเบราว์เซอร์บน iOS เป็น Safari ปลอมตัว
wortwart

3

สำหรับบันทึกวิธีที่ปลอดภัยที่สุดที่ฉันพบคือใช้ส่วน Safari ของรหัสตรวจจับเบราว์เซอร์จากคำตอบนี้ :

const isSafari = window['safari'] && safari.pushNotification &&
    safari.pushNotification.toString() === '[object SafariRemoteNotification]';

แน่นอนว่าวิธีที่ดีที่สุดในการจัดการกับปัญหาเฉพาะเบราว์เซอร์คือการตรวจจับคุณลักษณะเสมอหากทำได้ แม้ว่าการใช้โค้ดส่วนหนึ่งเช่นเดียวกับด้านบนนั้นยังดีกว่าการตรวจจับสตริงตัวแทน


1
สิ่งนี้ใช้ไม่ได้กับ Safari Version / 13.1 Mobile / 15E148 Safari / 604.1 บน iPhone OS 13_4_1
mindo

2

ฉันรู้ว่าคำถามนี้เก่า แต่ฉันก็คิดที่จะโพสต์คำตอบอยู่ดีเพราะอาจช่วยใครบางคนได้ โซลูชันข้างต้นล้มเหลวในบางกรณีเราจึงต้องใช้วิธีนี้ในลักษณะที่จัดการกับ iOS, เดสก์ท็อปและแพลตฟอร์มอื่น ๆ แยกกัน

function isSafari() {
    var ua = window.navigator.userAgent;
    var iOS = !!ua.match(/iP(ad|od|hone)/i);
    var hasSafariInUa = !!ua.match(/Safari/i);
    var noOtherBrowsersInUa = !ua.match(/Chrome|CriOS|OPiOS|mercury|FxiOS|Firefox/i)
    var result = false;
    if(iOS) { //detecting Safari in IOS mobile browsers
        var webkit = !!ua.match(/WebKit/i);
        result = webkit && hasSafariInUa && noOtherBrowsersInUa
    } else if(window.safari !== undefined){ //detecting Safari in Desktop Browsers
        result = true;
    } else { // detecting Safari in other platforms
        result = hasSafariInUa && noOtherBrowsersInUa
    }
    return result;
}


1

"ปัญหา" ที่ไม่เหมือนใครนี้เป็นสัญญาณ 100% ว่าเบราว์เซอร์คือ Safari (เชื่อหรือไม่)

if (Object.getOwnPropertyDescriptor(Document.prototype, 'cookie').descriptor === false) {
   console.log('Hello Safari!');
}

ซึ่งหมายความว่าตัวอธิบายวัตถุคุกกี้ถูกตั้งค่าเป็นเท็จบน Safari ในขณะที่สิ่งอื่น ๆ ทั้งหมดเป็นจริงซึ่งทำให้ฉันปวดหัวกับโครงการอื่น ขอให้สนุกกับการเขียนโค้ด!


ดูเหมือนจะไม่เป็นความจริงอีกต่อไป ยังขัดข้องบน Firefox "Object.getOwnPropertyDescriptor (... ) is undefined"
Offirmo

0

อาจจะใช้งานได้:

Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor')

แก้ไข: ไม่ต้องทำงานอีกต่อไป


สิ่งนี้ทำอะไรกันแน่เพราะส่งคืน -1 ในเบราว์เซอร์ทั้งหมด
Petroff

@ Petroff มันไม่ทำงานในซาฟารีรุ่นใหม่อีกต่อไป ขอบคุณที่ชี้ให้เห็น
Harshal Carpenter

2
อย่าลังเลที่จะลบคำตอบ
Flimm

0

ในกรณีของฉันฉันต้องการกำหนดเป้าหมาย Safari ทั้งบน iOS และ macOS สิ่งนี้ใช้ได้ผลสำหรับฉัน:

if (/apple/i.test(navigator.vendor)) {
  // It's Safari
}

-1

ฉันสร้างฟังก์ชันที่ส่งคืนประเภทบูลีน:

export const isSafari = () => navigator.userAgent.toLowerCase().indexOf('safari') !== -1

-3

การดมกลิ่นของตัวแทนผู้ใช้เป็นเรื่องยุ่งยากและไม่น่าเชื่อถือ เราพยายามตรวจจับ Safari บน iOS ด้วยคำตอบของ @ qingu ข้างต้นมันใช้ได้ดีกับ Safari, Chrome และ Firefox แต่ตรวจพบว่า Opera และ Edge เป็น Safari อย่างไม่ถูกต้อง

ดังนั้นเราจึงไปกับการตรวจจับคุณสมบัติเหมือน ณ วันนี้serviceWorkerรองรับเฉพาะใน Safari และไม่ได้อยู่ในเบราว์เซอร์อื่น ๆ บน iOS ตามที่ระบุไว้ในhttps://jakearchibald.github.io/isserviceworkerready/

การสนับสนุนไม่รวมเบราว์เซอร์บุคคลที่สามเวอร์ชัน iOS บนแพลตฟอร์มนั้น (ดูการสนับสนุน Safari)

เราจึงทำสิ่งที่ชอบ

if ('serviceWorker' in navigator) {
    return 'Safari';
}
else {
    return 'Other Browser';
}

หมายเหตุ : ไม่ได้ทดสอบบน Safari บน MacOS

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.