Tôi cần một số chức năng trả về giá trị boolean để kiểm tra xem trình duyệt có phải là Chrome không .
Làm thế nào để tôi tạo chức năng như vậy?
Tôi cần một số chức năng trả về giá trị boolean để kiểm tra xem trình duyệt có phải là Chrome không .
Làm thế nào để tôi tạo chức năng như vậy?
Câu trả lời:
Cập nhật: Vui lòng xem câu trả lời của Jonathan để biết cách cập nhật để xử lý việc này. Câu trả lời dưới đây có thể vẫn hoạt động, nhưng nó có thể kích hoạt một số dương tính giả trong các trình duyệt khác.
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
Tuy nhiên, như Đại lý người dùng đã đề cập có thể bị giả mạo, vì vậy, tốt nhất là sử dụng tính năng phát hiện tính năng (ví dụ: Modernizer ) khi xử lý các vấn đề này, như các câu trả lời khác đề cập.
var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Google Inc
để navigator.vendor
, vì vậy phương pháp này không phải là tuyệt đối, giống như /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)
có lẽ làm việc tốt hơn
Để kiểm tra xem trình duyệt có phải là Google Chrome hay không , hãy thử điều này:
// 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
}
Ví dụ về việc sử dụng: http://codepen.io/jonathan/pen/WpQELR
Lý do điều này hoạt động là vì nếu bạn sử dụng trình kiểm tra Google Chrome và chuyển đến tab bảng điều khiển. Nhập 'window' và nhấn enter. Sau đó, bạn có thể xem các thuộc tính DOM cho 'đối tượng cửa sổ'. Khi bạn thu gọn đối tượng, bạn có thể xem tất cả các thuộc tính, bao gồm cả thuộc tính 'chrome'.
Bạn không thể sử dụng đúng bằng đúng nữa để kiểm tra trong IE window.chrome
. IE dùng để trả về undefined
, bây giờ nó trả về true
. Nhưng đoán xem, IE11 bây giờ trả lại không xác định một lần nữa. IE11 cũng trả về một chuỗi rỗng""
cho window.navigator.vendor
.
Tôi hi vọng cái này giúp được!
CẬP NHẬT:
Cảm ơn Halcyon991 vì đã chỉ ra bên dưới, rằng Opera 18+ mới cũng cho kết quả đúng window.chrome
. Có vẻ như Opera 18 dựa trên Chromium 31 . Vì vậy, tôi đã thêm một kiểm tra để đảm bảo rằng window.navigator.vendor
: "Google Inc"
và không phải là "Opera Software ASA"
. Ngoài ra, cảm ơn Ring và Adrien Be vì đã đề cập đến việc Chrome 33 không trở lại đúng nữa ... window.chrome
bây giờ hãy kiểm tra xem có phải không. Nhưng hãy chú ý đến IE11, tôi đã thêm kiểm tra lại undefined
vì IE11 bây giờ xuất ra undefined
, giống như khi nó được phát hành lần đầu tiên .. sau đó, một số bản cập nhật được xây dựng để xuất true
hiện .. hiện tại bản dựng bản cập nhật mới xuất hiệnundefined
lại . Microsoft không thể quyết định được!
CẬP NHẬT 24/07/2015 - bổ sung cho kiểm tra Opera
Opera 30 vừa được phát hành. Nó không còn đầu ra window.opera
. Và cũng window.chrome
xuất ra đúng trong Opera 30 mới. Vì vậy, bạn phải kiểm tra xem OPR có trong userAgent không . Tôi đã cập nhật điều kiện của mình ở trên để giải thích cho sự thay đổi mới này trong Opera 30, vì nó sử dụng cùng một công cụ kết xuất như Google Chrome.
CẬP NHẬT 10/13/2015 - bổ sung cho kiểm tra IE
Đã thêm kiểm tra cho IE Edge do nó xuất ra true
cho window.chrome
.. mặc dù đầu ra IE11 undefined
cho window.chrome
. Cảm ơn nghệ sĩ cho chúng tôi biết về điều này!
CẬP NHẬT 2/5/2016 - bổ sung cho kiểm tra Chrome của iOS
Đã thêm kiểm tra cho iOS Chrome kiểm tra CriOS
do nó xuất ra true
cho Chrome trên iOS. Cảm ơn xinthose cho chúng tôi biết về điều này!
CẬP NHẬT 18/8/2018 - thay đổi để kiểm tra Opera
Kiểm tra sửa cho Opera, kiểm tra window.opr
không phải là undefined
kể từ bây giờ Chrome 66 có OPR
trong window.navigator.vendor
. Cảm ơn Frosty Z và Daniel Wallman đã báo cáo điều này!
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
, do đó isChrome()
trả về false .
window.opr
không undefined
.
thậm chí ngắn hơn: var is_chrome = /chrome/i.test( navigator.userAgent );
true
trong Microsoft Edge.
Một giải pháp đơn giản hơn nhiều chỉ là sử dụng:
var isChrome = !!window.chrome;
Chỉ !!
cần chuyển đổi đối tượng thành một giá trị boolean. Trong các trình duyệt không phải Chrome, thuộc tính này sẽ undefined
không đúng sự thật.
Lưu ý rằng điều này cũng trả về đúng cho các phiên bản Edge dựa trên Chrome (cảm ơn @Carrm vì đã chỉ ra điều này).
true
để window.chrome
. Kiểm tra conditionizr.com có phát hiện chống đạn + sửa lỗi.
!!
chuyển đổi giá trị thành true
hoặc false
. typeof(window.chrome)
cho "object"
, trong khi typeof(!!window.chrome)
cho "boolean"
. Mẫu mã của bạn cũng hoạt động vì if
câu lệnh thực hiện chuyển đổi.
true
cho 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
trong Microsoft Edge.
Bạn cũng có thể muốn phiên bản cụ thể của Chrome:
var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
var uaArray = ua.split(' ')
, version = uaArray[uaArray.length - 2].substr(7);
}
Xin lỗi The Big Lebowski vì đã sử dụng câu trả lời của anh ấy trong tôi.
"537.36"
trong Microsoft Edge.
Bạn có thể dùng:
navigator.userAgent.indexOf("Chrome") != -1
Nó đang làm việc trên v.71
navigator.userAgent.includes("Chrome")
Hoạt động với tôi trên Chrome trên Mac. Có vẻ là hoặc đơn giản hơn hoặc đáng tin cậy hơn (trong trường hợp chuỗi userAgent được kiểm tra) so với tất cả ở trên.
var isChrome = false;
if (window.chrome && !window.opr){
isChrome = true;
}
console.log(isChrome);
const isChrome = window.chrome && !window.opr;
Người dùng có thể thay đổi tác nhân người dùng. Hãy thử kiểm tra webkit
thuộc tính tiền tố trong style
đối tượng của body
phần tử
if ("webkitAppearance" in document.body.style) {
// do stuff
}
Kiểm tra điều này: Làm cách nào để phát hiện trình duyệt Safari, Chrome, IE, Firefox và Opera?
Trong trường hợp của bạn: var isChrom = !! window.chrom && (!! window.chrome.webstore || !! window.chrome.r Yoon);
Để biết tên của các trình duyệt máy tính để bàn khác nhau (Firefox, IE, Opera, Edge, Chrome). Ngoại trừ 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;
}
Hoạt động trong các phiên bản trình duyệt sau:
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)
Xem ý chính ở đây và fiddle ở đây
Đoạn mã gốc không còn hoạt động cho Chrome và tôi đã quên nơi tôi tìm thấy nó. Nó đã có safari trước đây nhưng tôi không còn quyền truy cập safari nữa nên tôi không thể xác minh được nữa.
Chỉ có mã Firefox và IE là một phần của đoạn mã gốc.
Việc kiểm tra Opera, Edge và Chrome rất đơn giản. Họ có sự khác biệt trong userAgent. OPR
chỉ tồn tại trong Opera. Edge
chỉ tồn tại trong Edge. Vì vậy, để kiểm tra Chrome, chuỗi này không nên có.
Đối với Firefox và IE, tôi không thể giải thích những gì họ làm.
Tôi sẽ thêm chức năng này vào một gói tôi đang viết
tất cả các câu trả lời đều sai. "Opera" và "Chrome" giống nhau trong mọi trường hợp.
(phần chỉnh sửa)
đây là câu trả lời đúng
if (window.chrome && window.chrome.webstore) {
// this is Chrome
}
window.chrome.webstore
bây giờundefined