ฉันต้องการฟังก์ชั่นบางอย่างที่ส่งคืนค่าบูลีนเพื่อตรวจสอบว่าเบราว์เซอร์เป็นChromeหรือไม่
ฉันจะสร้างฟังก์ชั่นดังกล่าวได้อย่างไร
ฉันต้องการฟังก์ชั่นบางอย่างที่ส่งคืนค่าบูลีนเพื่อตรวจสอบว่าเบราว์เซอร์เป็นChromeหรือไม่
ฉันจะสร้างฟังก์ชั่นดังกล่าวได้อย่างไร
คำตอบ:
อัปเดต: โปรดดูคำตอบของโจนาธานสำหรับวิธีการอัปเดตในการจัดการสิ่งนี้ คำตอบด้านล่างอาจยังใช้งานได้ แต่เป็นไปได้ว่าอาจก่อให้เกิดผลบวกปลอมในเบราว์เซอร์อื่น
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
อย่างไรก็ตามตัวแทนผู้ใช้ดังกล่าวสามารถปลอมแปลงดังนั้นจึงเป็นการดีที่สุดที่จะใช้การตรวจจับคุณสมบัติ (เช่นModernizer ) เมื่อจัดการกับปัญหาเหล่านี้ตามคำตอบอื่น ๆ ที่กล่าวถึง
var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Google Incมาnavigator.vendorเป็นดังนั้นวิธีนี้ไม่กันกระสุนบางอย่างที่/Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)น่าจะทำงานได้ดีกว่า
หากต้องการตรวจสอบว่าเบราว์เซอร์เป็นGoogle Chromeหรือไม่ลองนี้:
// please note,
// that IE11 now returns undefined again for window.chrome
// and new Opera 30 outputs true for window.chrome
// but needs to check if window.opr is not undefined
// and new IE Edge outputs to true now for window.chrome
// and if not iOS Chrome check
// so use the below updated condition
var isChromium = window.chrome;
var winNav = window.navigator;
var vendorName = winNav.vendor;
var isOpera = typeof window.opr !== "undefined";
var isIEedge = winNav.userAgent.indexOf("Edge") > -1;
var isIOSChrome = winNav.userAgent.match("CriOS");
if (isIOSChrome) {
// is Google Chrome on IOS
} else if(
isChromium !== null &&
typeof isChromium !== "undefined" &&
vendorName === "Google Inc." &&
isOpera === false &&
isIEedge === false
) {
// is Google Chrome
} else {
// not Google Chrome
}
ตัวอย่างการใช้งาน: http://codepen.io/jonathan/pen/WpQELR
เหตุผลนี้ใช้ได้เพราะถ้าคุณใช้ตัวตรวจสอบ Google Chrome และไปที่แท็บคอนโซล พิมพ์ 'window' แล้วกด Enter จากนั้นคุณสามารถดูคุณสมบัติ DOM สำหรับ 'window object' เมื่อคุณยุบวัตถุคุณสามารถดูคุณสมบัติทั้งหมดรวมถึงคุณสมบัติ 'chrome'
คุณไม่สามารถใช้อย่างเคร่งครัดเท่ากับความจริงอีกต่อไปเพื่อตรวจสอบใน IE window.chromeสำหรับ IE ใช้ในการกลับมาตอนนี้มันกลับundefined แต่คาดเดาว่าตอนนี้ IE11 จะส่งกลับไม่ได้กำหนดอีกครั้ง IE11 ยังส่งกลับสตริงว่างสำหรับtrue""window.navigator.vendor
ฉันหวังว่านี่จะช่วยได้!
UPDATE:
ขอขอบคุณHalcyon991 ที่ชี้ให้เห็นด้านล่างว่า Opera 18+ ใหม่ให้ผลลัพธ์ที่เป็นจริงwindow.chromeเช่นกัน ดูเหมือนว่าโอเปร่า 18จะขึ้นอยู่กับโครเมี่ยม 31 ดังนั้นผมจึงเพิ่มการตรวจสอบเพื่อให้แน่ใจว่าwindow.navigator.vendorเป็น: และไม่ได้เป็น"Google Inc" "Opera Software ASA"นอกจากนี้ยังต้องขอบคุณRingและAdrien Beสำหรับการเป็นผู้นำเกี่ยวกับ Chrome 33 ที่ไม่ได้กลับมาเป็นจริงอีกต่อไป ... window.chromeตอนนี้ตรวจสอบว่าไม่ใช่โมฆะ แต่เล่นอย่างใกล้ชิดกับ IE11 ฉันเพิ่มการตรวจสอบย้อนกลับundefinedเนื่องจาก IE11 ตอนนี้ออกundefinedเช่นเดียวกับที่ทำเมื่อเปิดตัวครั้งแรก .. หลังจากนั้นบางส่วนสร้างการปรับปรุงมันเอาท์พุทเป็นtrue.. ตอนนี้สร้างการปรับปรุงล่าสุดจะส่งออกundefinedอีกครั้ง Microsoft ไม่สามารถตัดสินใจได้!
อัพเดท 7/24/2015 - เพิ่มเติมสำหรับการตรวจสอบ Opera
Opera 30 เพิ่งเปิดตัว window.operaมันไม่ได้ผล และยังwindow.chromeให้ผลลัพธ์เป็นจริงใน Opera 30 ใหม่ดังนั้นคุณต้องตรวจสอบว่าOPRอยู่ในuserAgentหรือไม่ ฉันได้อัปเดตเงื่อนไขของฉันด้านบนเป็นบัญชีสำหรับการเปลี่ยนแปลงใหม่ใน Opera 30 เนื่องจากใช้เครื่องมือเรนเดอร์เดียวกันกับ Google Chrome
UPDATE 10/13/2015 - เพิ่มเติมสำหรับการตรวจสอบ IE
เพิ่มการตรวจสอบสำหรับ IE ขอบเพราะมันแสดงผลtrueสำหรับwindow.chrome.. แม้ว่า IE11 ผลสำหรับundefined window.chromeขอบคุณartfulhacker ที่แจ้งให้เราทราบเกี่ยวกับเรื่องนี้!
อัปเดต 2/5/2016 - การตรวจสอบ iOS Chrome เพิ่มเติม
เพิ่มการตรวจสอบ iOS Chrome CriOSเนื่องจากมีการส่งออกtrueChrome บน iOS ขอบคุณxinthose ที่แจ้งให้เราทราบเกี่ยวกับเรื่องนี้!
UPDATE 4/18/2018 - เปลี่ยนเป็นเช็ค Opera
การตรวจสอบการแก้ไขสำหรับโอเปร่า, การตรวจสอบwindow.oprไม่ได้undefinedตั้งแต่ตอนนี้ Chrome 66 มีในOPR window.navigator.vendorขอบคุณFrosty ZและDaniel Wallman ที่รายงานสิ่งนี้!
Mozilla/5.0 (Linux; Android 8.0.0; ASUS_Z012D Build/OPR1.170623.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36ดังนั้นisChrome()ผลตอบแทนที่เป็นเท็จ
window.opr undefined
สั้นกว่า: var is_chrome = /chrome/i.test( navigator.userAgent );
trueใน Microsoft Edge
วิธีที่ง่ายกว่านั้นคือใช้งาน:
var isChrome = !!window.chrome;
!!เพียงแปลงวัตถุที่ค่าบูลีน ในเบราว์เซอร์ที่ไม่ใช่ Chrome คุณสมบัตินี้จะเป็นundefinedซึ่งไม่เป็นความจริง
โปรดทราบว่าสิ่งนี้จะส่งคืนค่าจริงสำหรับเวอร์ชันของ Edge ที่ใช้ Chrome (ขอบคุณ @Carrm สำหรับการชี้ให้เห็น)
true window.chromeตรวจสอบ conditionizr.com ซึ่งมีระบบกันกระสุนกันกระสุน + แก้ไข
!!แปลงค่าเป็นอย่างใดอย่างหนึ่งหรือtrue ทำให้ในขณะที่ช่วยให้ ตัวอย่างรหัสของคุณก็ใช้งานได้เช่นกันเนื่องจากคำสั่งทำการแปลง falsetypeof(window.chrome)"object"typeof(!!window.chrome)"boolean"if
trueสำหรับ Edge ด้วย
console.log(JSON.stringify({
isAndroid: /Android/.test(navigator.userAgent),
isCordova: !!window.cordova,
isEdge: /Edge/.test(navigator.userAgent),
isFirefox: /Firefox/.test(navigator.userAgent),
isChrome: /Google Inc/.test(navigator.vendor),
isChromeIOS: /CriOS/.test(navigator.userAgent),
isChromiumBased: !!window.chrome && !/Edge/.test(navigator.userAgent),
isIE: /Trident/.test(navigator.userAgent),
isIOS: /(iPhone|iPad|iPod)/.test(navigator.platform),
isOpera: /OPR/.test(navigator.userAgent),
isSafari: /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent),
isTouchScreen: ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch,
isWebComponentsSupported: 'registerElement' in document && 'import' in document.createElement('link') && 'content' in document.createElement('template')
}, null, ' '));
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );
trueใน Microsoft Edge
คุณอาจต้องการ Chrome รุ่นที่ระบุ:
var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
var uaArray = ua.split(' ')
, version = uaArray[uaArray.length - 2].substr(7);
}
ขอโทษ The Big Lebowski ที่ใช้คำตอบของเขาในเหมือง
"537.36"ใน Microsoft Edge
คุณสามารถใช้ได้:
navigator.userAgent.indexOf("Chrome") != -1
มันทำงานบน v.71
navigator.userAgent.includes("Chrome")
ใช้งานได้สำหรับฉันบน Chrome บน Mac ดูเหมือนว่าจะง่ายขึ้นหรือน่าเชื่อถือมากขึ้น (ในกรณีที่ทดสอบ userAgent string) กว่าทั้งหมดข้างต้น
var isChrome = false;
if (window.chrome && !window.opr){
isChrome = true;
}
console.log(isChrome);
const isChrome = window.chrome && !window.opr;
ผู้ใช้สามารถเปลี่ยนตัวแทนผู้ใช้ ลองทดสอบwebkitคุณสมบัตินำหน้าในstyleวัตถุของbodyองค์ประกอบ
if ("webkitAppearance" in document.body.style) {
// do stuff
}
ตรวจสอบสิ่งนี้: วิธีการตรวจหาเบราว์เซอร์ Safari, Chrome, IE, Firefox และ Opera?
ในกรณีของคุณ: var isChrome = !! window.chrome && (!! window.chrome.webstore || !! window.chrome.runtime);
หากต้องการทราบชื่อของเบราว์เซอร์เดสก์ท็อปที่แตกต่างกัน (Firefox, IE, Opera, Edge, Chrome) ยกเว้น Safari
function getBrowserName() {
var browserName = '';
var userAgent = navigator.userAgent;
(typeof InstallTrigger !== 'undefined') && (browserName = 'Firefox');
( /* @cc_on!@*/ false || !!document.documentMode) && (browserName = 'IE');
(!!window.chrome && userAgent.match(/OPR/)) && (browserName = 'Opera');
(!!window.chrome && userAgent.match(/Edge/)) && (browserName = 'Edge');
(!!window.chrome && !userAgent.match(/(OPR|Edge)/)) && (browserName = 'Chrome');
/**
* Expected returns
* Firefox, Opera, Edge, Chrome
*/
return browserName;
}
ทำงานในเบราว์เซอร์เวอร์ชันต่อไปนี้:
Opera - 58.0.3135.79
Firefox - 65.0.2 (64-bit)
IE - 11.413.15063 (JS Fiddle no longer supports IE just paste in Console)
Edge - 44.17763.1.0
Chrome - 72.0.3626.121 (Official Build) (64-bit)
ข้อมูลโค้ดต้นฉบับไม่สามารถใช้งานกับ Chrome ได้อีกต่อไปและฉันลืมที่ฉันพบ เคยเป็นซาฟารีมาก่อน แต่ฉันไม่สามารถเข้าถึงซาฟารีได้อีกต่อไปดังนั้นฉันจึงไม่สามารถยืนยันได้อีกต่อไป
เฉพาะรหัส Firefox และ IE เท่านั้นที่เป็นส่วนหนึ่งของข้อมูลโค้ดต้นฉบับ
การตรวจสอบ Opera, Edge และ Chrome อยู่ตรงหน้า พวกเขามีความแตกต่างใน userAgent OPRมีอยู่ใน Opera เท่านั้นEdgeมีอยู่ใน Edge เท่านั้น ดังนั้นเพื่อตรวจสอบ Chrome สตริงเหล่านี้ไม่ควรมี
สำหรับ Firefox และ IE ฉันไม่สามารถอธิบายสิ่งที่พวกเขาทำ
ฉันจะเพิ่มฟังก์ชันนี้ให้กับ แพ็คเกจที่ฉันเขียน
คำตอบทั้งหมดผิด "Opera" และ "Chrome" เหมือนกันในทุกกรณี
(ส่วนที่แก้ไข)
นี่คือคำตอบที่ถูก
if (window.chrome && window.chrome.webstore) {
// this is Chrome
}
window.chrome.webstoreตอนนี้undefined