2008-09-17 21 views
15

Başlık olarak, Google Chrome'u tespit etmek için güvenli bir özellik tabanlı (yani, navigator.appName veya navigator.appVersion kullanmadan) yolunu bulmak istiyorum.Google Chrome'u Javascript ile tespit etmek için güvenli özellik tabanlı bir yol?

By

Ben örneğin, ortalama özellik tabanlı:

if(window.ActiveXObject) { 
    // internet explorer! 
} 

Düzenleme: o işaret oldu gibi bir özelliği uygulamak istiyorsanız, soru açıkçası (çok mantıklı değil, sen Bunun için test edin, belirli bir tarayıcı için tespit etmek istiyorsanız, kullanıcı aracısını kontrol edin), üzgünüm, 5 am;) Bana şunu söyleyeyim: Chrome'a ​​özgü herhangi bir javascript nesnesi ve/veya özelliği var mı? ..

+1

Neden (window.opera & & navigator.taintEnable & & document.evaluate & & navigator.product = 'Gecko'!!)? Elbette özelliği ile kontrol ediyorsanız, hangi tarayıcı olduğu önemli değil, hangi özellikleri desteklediği önemlidir. – SCdF

+0

Katılıyorum .. neden bu şekilde yapmanız gerekiyor? Zorlayıcı nedenler olmadıkça bana kötü bir fikir gibi geliyor, açıklayabilir misiniz? –

+0

Dediğim gibi, çoğunlukla meraktan sordum ... Bence "güvenli" kısma çok fazla önem verdim :), sormak için başka bir yol olurdu: Chrome'a ​​özgü herhangi bir Javascript nesnesi veya özelliği var mı? – jeannicolas

cevap

29
isChrome = function() { 
    return Boolean(window.chrome); 
} 
+1

Bana 'Hoş Geldiniz Chrome Kullanıcısı' uyarısı gibi örnek bir kullanım gösterebilir misiniz? Eğer tarayıcıları Chrome ise –

+0

Sadece ben miyim, yoksa bu işe yaramaz mı? (As: 1/14/2014) – VoidKing

+1

Sadece en son sürümler için bile yukarıdaki isChrome işlevinin çalıştığını doğruladım. (JS konsolunuzu chrome cinsinden açın. "Boolean (window.chrome) yazın." "Doğru" görmelisiniz. Diğer tarayıcılarda deneyin ve "false" görmelisiniz.) – pcorcoran

4

Sorunun tam olarak bir cevabı değil ... ama belirli bir tarayıcı markasını tespit etmeye çalışıyorsanız özellik denetimi, bir çeşit kayıptır. Diğer tarayıcıların Chrome userAgent dizesini kullandığından şüpheleniyorum. Bu nedenle, sorunuzu 'bu tarayıcı Chrome'sa, şuna da bakmalısınız. (Bu arada, window.ActiveXObject, IE'yi garanti etmez, bu nesneyi sağlayan diğer tarayıcılar için eklentiler vardır. Yapmaya çalıştığım noktayı gösterir.)

+0

Kesinlikle haklısınız! :) Sanırım sormam gereken şey: Chrome'a ​​özgü herhangi bir JS nesnesi var mı ... sadece meraktan gerçekten vazgeçme ... – jeannicolas

0

Sen Özellikle Chrome tespit edilmemelidir. Herhangi bir şey varsa, Web oluşturma işlemini yapmalısınız, çünkü sayfa oluşturma söz konusu olduğunda Chrome, diğer WebKit tarayıcıları gibi davranmalıdır (Safari, Epiphany). Size http://trac.webkit.org/wiki/DetectingWebKit

Ama diğerlerinin yukarıda söylediği gibi yine, sen tarayıcıları tespit etmemelidir: Eğer WebKit algılamak değil, aynı zamanda sürüm kullanılıyor tam olarak ne olduğunu öğrenmek için sadece gerekiyorsa

, bu bağlantıya bakın özellikleri tespit etmeli. Bu konuda daha fazla bilgi için şu ADC makalesine bakın: http://developer.apple.com/internet/webcontent/objectdetection.html

0

Tarayıcıyı bilmeniz gereken bir nedeni, Chrome'un 'standartlara uygun' olduğu için olmasıdır. Daha önce standartlara uygun olduğunu düşündüğüm eski JavaScript kodunda (oldukça iyi olan FF veya Opera standartlarına göre) sorunlarla karşılaştım, ancak Chrome daha da seçiciydi. Bazı kodları yeniden yazmam için beni zorladı, ancak zaman zaman onu çalıştırmak için if (isChrome) {blah ... blah) hilesi kullanmak daha kolay olabilirdi. Chrome çok iyi çalışıyor gibi görünüyor (standart uyumluluk içindeyim), ancak bazen kullanıcının ne kadar ayrıntılı çalıştığını bilmeniz gerekiyor.

Ayrıca, Chrome çok hızlıdır. Sorun şu ki, bazı JavaScript kodları istemeden diğer tarayıcıların yavaş çalışmasına bağlıdır, örneğin: sayfa yükleme, iframe yükleme, sayfa başlığı bağlantılarının ve javascript bağlantılarının sayfa başlığında yerleştirilmesi, vb. Bu işlevler gerçekten kullanılabilir olduğunda yeni sorunlara neden olabilir. sayfa öğeleriyle etkileşime geçmek. Şimdilik, gerçekten bilmeniz gerekebilir ...

+0

Opera ve Safari, Chrome’dan daha iyi standart JS desteğine sahiptir. Bakın: http://sputnik.googlelabs.com/ – Savageman

3

Tüm standartlar için nazis ...Bazen henüz standart olmayan kanama "standart teknolojileri" kullanmak isteyebilirsiniz ama onlar olacak ... Css3 özellikleri gibi.

Bu sayfayı neden bulmamın nedeni budur.

Bazı nedenlerden dolayı, Safari, kutu gölgeli bir sınır yarıçapı kombinasyonunu gayet iyi çalışır, ancak krom bileşimi doğru şekilde oluşturmaz. Yani kombinasyonu devre dışı bırakmak için webkit olsa bile kromu tespit etmenin bir yolunu bulmak güzel olurdu.

... usually ben büyük kötülük tarafından desteklenmeyen ne yapmak istediğini, çünkü serin bir özellik için bir fikir hurdaya içinde biter belirli bir tarayıcı/sürüm algılamak için sebepler yüzlerce koştu ettik

Fakat bazen, bazı özellikler henüz standartlaştırılmamış olsalar bile bunları kullanmamak için çok havalı.

0

Ben

 
if (window.sidebar) { 
// Mozilla Firefox Bookmark 
window.sidebar.addPanel(title, url,""); 
} else if(window.external) { // IE Favorite 
    if(window.ActiveXObject) { 
    //ie 
    window.external.AddFavorite(url, title); 
    } else { 
    //chrome 
    alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok'); 
    } 
} else if(window.opera && window.print) { 
// Opera 
    return true; } 
else { //safri 
alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok'); } 

8

Bu cevap çok eskidir her tarayıcı için yer imleri yapmak (ya webkit kodunu bir ileti görüntüler) için bu kodu kullanabilirsiniz, ancak bu taş devrine geri sonra çok alakalı oldu.

Özellik algılaması, Opera ambiguosity here'u yönlendirdiğimde, navigator.userAgent ayrıştırma işleminden daha kullanışlı olduğunu düşünüyorum. IE16'nın/MSIE 16.0/regexp'i ayrıştırıp ayrıştırmayacağını kimse bilemez; ancak emin olabiliriz, document.all desteği olacak. Gerçek hayatta, özellikler genellikle tarayıcılar için eşanlamlıdır, örneğin: "Hayır XMLHttpRequest? Bu f .... d IE6!" Hiçbir nonIE tarayıcısı document.all öğesini desteklemez, ancak Maxthon gibi bazı tarayıcılar userAgent'ı karıştırır. (Tabii ki script, Firefox'ta bir sebepten dolayı document.all'i tanımlayabilir, fakat kolay kontrol edilebilir.) Bu yüzden bu çözümü öneririm.

DüzenleHere Tam kaynakları buldum.

Edit 2 Bu belgeyi test ettim.all da Opera tarafından destekleniyor! Kullanılması

var is = { 
    ff: window.globalStorage, 
    ie: document.all && !window.opera, 
    ie6: !window.XMLHttpRequest, 
    ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera, 
    ie8: document.documentMode==8, 
    opera: Boolean(window.opera), 
    chrome: Boolean(window.chrome), 
    safari: window.getComputedStyle && !window.globalStorage && !window.opera 
} 

basittir:

if(is.ie6) { ... } 
+3

şunun gibi: sarı saçlarınız ve beyaz dişleriniz var mı? Brad Pitt olmalısın ... – galambalazs

+1

Ne demek istiyorsun omg hayır? Bu tam olarak özellik tespiti ile ilgilidir. –

1

Sık sık davranış/yetenek algılama kullanın. Tarayıcının adı (kullanıcı aracısı) ne olabileceğine göre çalışıp çalışmadığını öğrenmek yerine, tarayıcının etrafta çalışmaya başlamadan önce işlevselliği destekleyip desteklemediğini doğrudan kontrol edin.

Tarayıcınıza özgü geçici çözümlerle ilgili bir sorun, hatanın giderilip giderilmediğini veya özelliği desteklenip desteklenmediğini bilmiyorsunuz. Yetenek tespiti yaptığınızda, numaralı telefonun numarasını bildiğinden, tarayıcı doğrudan destekliyor veya desteklemiyor ve sadece tarayıcı-ist değilsiniz.

http://diveintohtml5.ep.io/everything.html

0

isIE: !! (window.addEventListener & & window.ActiveXObject!),

isIE6. Typeof document.createElement ('div') style.maxHeight == "tanımsız",

isIE7: !! (! Window.! AddEventListener & & window.XMLHttpRequest & & document.querySelectorAll),

isIE8: !! (window.addEventListener & & document.querySelectorAll & & document.documentMode == 8),

isGecko: gezgini. ürün == 'Gecko',

isOpera: !! window.opera,

isChrome: !! window.chrome,

isWebkit: !!,

+1

FYI, 'isIE' artık IE9' window.addEventListener' desteklemektedir. IE için dayanıklı bir kontrol, IE'nin her yeni sürümünü kırmamalıdır. – jfriend00