Saya perlu beberapa fungsi mengembalikan nilai boolean untuk memeriksa apakah browser itu Chrome .
Bagaimana cara membuat fungsi seperti itu?
Saya perlu beberapa fungsi mengembalikan nilai boolean untuk memeriksa apakah browser itu Chrome .
Bagaimana cara membuat fungsi seperti itu?
Jawaban:
Pembaruan: Silakan lihat jawaban Jonathan untuk cara yang diperbarui untuk menangani ini. Jawaban di bawah mungkin masih berfungsi, tetapi kemungkinan dapat memicu beberapa kesalahan positif di browser lain.
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
Namun, seperti yang disebutkan, Agen Pengguna dapat dipalsukan sehingga selalu terbaik untuk menggunakan pendeteksian fitur (mis. Modernizer ) saat menangani masalah ini, sebagaimana disebutkan oleh jawaban lain.
var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Google Inc
ke navigator.vendor
, jadi metode ini bukan antipeluru, sesuatu seperti /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)
mungkin akan bekerja lebih baik
Untuk memeriksa apakah browser adalah Google Chrome , coba ini:
// 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
}
Contoh penggunaan: http://codepen.io/jonathan/pen/WpQELR
Alasan ini berhasil adalah karena jika Anda menggunakan inspektur Google Chrome dan pergi ke tab konsol. Ketik 'jendela' dan tekan enter. Kemudian Anda dapat melihat properti DOM untuk 'objek jendela'. Saat Anda menutup objek, Anda dapat melihat semua properti, termasuk properti 'chrome'.
Anda tidak dapat menggunakan benar-benar sama dengan benar lagi untuk memeriksa di IE window.chrome
. IE digunakan untuk kembali undefined
, sekarang kembali true
. Tapi coba tebak, IE11 sekarang kembali tidak terdefinisi lagi. IE11 juga mengembalikan string kosong ""
untuk window.navigator.vendor
.
Saya harap ini membantu!
MEMPERBARUI:
Terima kasih kepada Halcyon991 karena telah menunjukkan di bawah ini, bahwa Opera 18+ yang baru juga menghasilkan true window.chrome
. Sepertinya Opera 18 didasarkan pada Chromium 31 . Jadi saya menambahkan cek untuk memastikan window.navigator.vendor
is: "Google Inc"
and not is "Opera Software ASA"
. Juga terima kasih kepada Ring dan Adrien Be untuk informasi terbaru tentang Chrome 33 yang tidak kembali benar lagi ... window.chrome
sekarang periksa apakah tidak nol. Tapi perhatikan IE11, saya menambahkan cek kembali undefined
karena IE11 sekarang mengeluarkan undefined
, seperti yang dilakukan ketika pertama kali dirilis .. kemudian setelah beberapa pembaruan membangun di- output ke true
.. sekarang pembaruan yang baru dibangun menghasilkan undefined
lagi. Microsoft tidak bisa mengatasinya!
PEMBARUAN 7/24/2015 - tambahan untuk pemeriksaan Opera
Opera 30 baru saja dirilis. Tidak ada lagi keluaran window.opera
. Dan juga window.chrome
keluaran true di Opera 30 yang baru. Jadi Anda harus memeriksa apakah OPR ada di UserAgent . Saya memperbarui kondisi saya di atas untuk memperhitungkan perubahan baru di Opera 30 ini, karena ia menggunakan mesin render yang sama seperti Google Chrome.
UPDATE 10/13/2015 - tambahan untuk pemeriksaan IE
Ditambahkan memeriksa untuk IE Edge karena itu keluaran true
untuk window.chrome
.. meskipun keluaran IE11 undefined
untuk window.chrome
. Terima kasih kepada artfulhacker yang telah memberi tahu kami tentang ini!
UPDATE 2/5/2016 - tambahan untuk pemeriksaan iOS Chrome
Menambahkan cek untuk iOS Chrome cek CriOS
karena itu mengeluarkan true
untuk Chrome di iOS. Terima kasih kepada xinthose yang telah memberi tahu kami tentang ini!
PEMBARUAN 4/18/2018 - ubah untuk pemeriksaan Opera
Diedit memeriksa untuk Opera, memeriksa window.opr
tidak undefined
sejak sekarang Chrome 66 ada OPR
di window.navigator.vendor
. Terima kasih kepada Frosty Z dan Daniel Wallman karena melaporkan ini!
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
, karenanya isChrome()
mengembalikan false .
window.opr
tidak undefined
.
bahkan lebih pendek: var is_chrome = /chrome/i.test( navigator.userAgent );
true
di Microsoft Edge.
Solusi yang jauh lebih sederhana adalah dengan menggunakan:
var isChrome = !!window.chrome;
The !!
hanya mengubah objek untuk nilai boolean. Di browser non-Chrome, properti ini adalahundefined
, yang tidak benar.
Perhatikan ini juga mengembalikan true untuk versi Edge yang didasarkan pada Chrome (terima kasih @Carrm untuk menunjukkan ini).
true
ke window.chrome
. Lihat conditionizr.com yang memiliki deteksi + perbaikan antipeluru.
!!
konversi menjadi salah satu true
atau false
. typeof(window.chrome)
memberi "object"
, sedangkan typeof(!!window.chrome)
memberi "boolean"
. Sampel kode Anda juga berfungsi juga karena if
pernyataan melakukan konversi.
true
untuk 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
di Microsoft Edge.
Anda mungkin juga menginginkan versi spesifik Chrome:
var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
var uaArray = ua.split(' ')
, version = uaArray[uaArray.length - 2].substr(7);
}
Permintaan maaf kepada The Big Lebowski karena menggunakan jawabannya di dalam jawabanku.
"537.36"
di Microsoft Edge.
Kamu bisa memakai:
navigator.userAgent.indexOf("Chrome") != -1
Ini bekerja pada v.71
navigator.userAgent.includes("Chrome")
Bekerja untuk saya di Chrome di Mac. Tampaknya atau lebih sederhana atau lebih dapat diandalkan (jika string userAgent diuji) daripada semua yang di atas.
var isChrome = false;
if (window.chrome && !window.opr){
isChrome = true;
}
console.log(isChrome);
const isChrome = window.chrome && !window.opr;
Pengguna dapat mengubah agen pengguna. Coba pengujian untuk webkit
properti awalan di style
objek body
elemen
if ("webkitAppearance" in document.body.style) {
// do stuff
}
Lihat ini: Bagaimana mendeteksi browser Safari, Chrome, IE, Firefox dan Opera?
Dalam kasus Anda: var isChrome = !! window.chrome && (!! window.chrome.webstore || !! window.chrome.runtime);
Untuk mengetahui nama-nama browser desktop yang berbeda (Firefox, IE, Opera, Edge, Chrome). Kecuali 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;
}
Bekerja di versi browser berikut:
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)
Lihat intinya di sini dan biola di sini
Cuplikan kode asli tidak lagi berfungsi untuk Chrome dan saya lupa di mana saya menemukannya. Itu memiliki safari sebelumnya, tetapi saya tidak lagi memiliki akses ke safari jadi saya tidak dapat memverifikasi lagi.
Hanya kode Firefox dan IE yang merupakan bagian dari cuplikan asli.
Pemeriksaan untuk Opera, Edge, dan Chrome benar. Mereka memiliki perbedaan dalam UserAgent. OPR
hanya ada di Opera. Edge
hanya ada di Edge. Jadi untuk memeriksa Chrome, string ini seharusnya tidak ada.
Sedangkan untuk Firefox dan IE, saya tidak bisa menjelaskan apa yang mereka lakukan.
Saya akan menambahkan fungsi ini ke paket yang saya tulis
semua jawaban salah. "Opera" dan "Chrome" sama dalam semua kasus.
(bagian yang diedit)
inilah jawaban yang tepat
if (window.chrome && window.chrome.webstore) {
// this is Chrome
}
window.chrome.webstore
sekarangundefined