2008-09-17 35 views
15

Khi trạng thái tiêu đề, tôi muốn tìm một tính năng an toàn (có nghĩa là, không sử dụng navigator.appName hoặc navigator.appVersion) để phát hiện Google Chrome.Cách dựa trên tính năng an toàn để phát hiện Google Chrome bằng Javascript?

Bằng tính năng dựa trên Ý tôi là, ví dụ:

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

Edit: Như nó được chỉ ra, câu hỏi không có ý nghĩa nhiều (rõ ràng nếu bạn muốn thực hiện chức năng này, bạn kiểm tra cho nó, nếu bạn muốn phát hiện một trình duyệt cụ thể, bạn kiểm tra tác nhân người dùng), xin lỗi, đó là 5 giờ sáng;) Hãy để tôi nói cụm từ như thế này: Có bất kỳ đối tượng javascript và/hoặc tính năng nào độc đáo với Chrome hay không. ..

+1

Tại sao (window.opera & & navigator.taintEnable & & document.evaluate & & navigator.product = 'Gecko'!)? Chắc chắn nếu bạn đang kiểm tra bởi tính năng sau đó nó không quan trọng mà trình duyệt nó được, nó quan trọng mà các tính năng nó hỗ trợ. – SCdF

+0

Tôi đồng ý .. tại sao bạn cần phải làm điều đó theo cách này? Nó có vẻ như một ý tưởng tồi với tôi trừ khi có những lý do thuyết phục, bạn có thể giải thích? –

+0

Như tôi đã nói, tôi đã hỏi phần lớn sự tò mò ... Tôi đã nhấn mạnh nhiều vào phần "an toàn" mà tôi nghĩ :), một cách khác để hỏi là: Bất kỳ đối tượng hoặc tính năng Javascript nào là duy nhất đối với Chrome? – jeannicolas

Trả lời

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

Bạn có thể chỉ cho tôi một ví dụ sử dụng như cảnh báo '' Chào mừng người dùng Chrome! '' nếu trình duyệt của họ là Chrome –

+0

Chỉ có tôi, hoặc điều này đơn giản là không hoạt động? (Kể từ: 1/14/2014) – VoidKing

+1

Tôi vừa xác minh rằng chức năng isChrome ở trên hoạt động, ngay cả đối với các bản phát hành gần đây nhất. (Mở bảng điều khiển JS của bạn bằng chrome. Nhập "Boolean (window.chrome)". Bạn sẽ thấy "true". Hãy thử trong các trình duyệt khác và bạn sẽ thấy "false".) – pcorcoran

4

Không chính xác câu trả lời cho câu hỏi ... nhưng nếu bạn đang cố gắng phát hiện một thương hiệu trình duyệt cụ thể, thì vấn đề tính năng kiểm tra là loại bị mất. Tôi rất nghi ngờ bất kỳ trình duyệt nào khác đang sử dụng chuỗi userAgent của Chrome, vì vậy nếu câu hỏi của bạn là 'trình duyệt Chrome này', bạn chỉ nên xem xét điều đó. (Nhân tiện, window.ActiveXObject không bảo đảm IE, có các plug-in cho các trình duyệt khác cung cấp đối tượng này. Loại minh họa nào mà tôi đã cố gắng tạo ra.)

+0

Bạn hoàn toàn đúng! :) Tôi đoán những gì tôi NÊN hỏi là: Có bất kỳ đối tượng JS nào là duy nhất đối với Chrome ... chỉ cần hỏi về sự tò mò thực sự ... – jeannicolas

1

Vì vậy, nếu bạn chấp nhận điểm Marijn và quan tâm đến việc kiểm tra các chuỗi tác nhân người dùng thông qua javascript:

var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

(Credit to: http://davidwalsh.name/detecting-google-chrome-javascript)


Dưới đây là một phân tích thực sự tốt đẹp/phân tích chuỗi ký tự người dùng chromes: http://www.simonwhatley.co.uk/whats-in-google-chromes-user-agent-string

0

Bạn không nên phát hiện Chrome cụ thể. Nếu có bất cứ điều gì, bạn nên phát hiện WebKit, vì cho đến khi hiển thị trang có liên quan, Chrome sẽ hoạt động chính xác như các trình duyệt WebKit khác (Safari, Epiphany).

Nếu bạn cần không chỉ để phát hiện WebKit, mà còn tìm hiểu chính xác những gì phiên bản đang được sử dụng, xem liên kết này: http://trac.webkit.org/wiki/DetectingWebKit

Nhưng một lần nữa, như những người khác đã nói ở trên, bạn nên không phát hiện trình duyệt, bạn nên phát hiện các tính năng. Xem bài viết ADC này để biết thêm về điều này: http://developer.apple.com/internet/webcontent/objectdetection.html

0

Một lý do bạn có thể cần biết trình duyệt là Chrome là vì nó 'tuân thủ các tiêu chuẩn nghiêm ngặt'. Tôi đã gặp vấn đề với mã JavaScript cũ mà tôi nghĩ là tuân thủ các tiêu chuẩn (theo tiêu chuẩn FF hoặc Opera - điều này khá tốt), nhưng Chrome thậm chí còn khó tính hơn. Nó buộc tôi phải viết lại một số mã, nhưng đôi khi nó có thể dễ dàng hơn để sử dụng thủ thuật if (isChrome) {blah ... blah) để nó chạy. Chrome có vẻ hoạt động rất tốt (tôi tuân thủ chuẩn) nhưng đôi khi bạn chỉ cần biết người dùng đang chạy chi tiết gì.

Ngoài ra, Chrome rất nhanh. Vấn đề là, một số mã JavaScript vô ý phụ thuộc vào sự chậm chạp của các trình duyệt khác để hoạt động chính xác, ví dụ: tải trang, tải khung nội tuyến, vị trí liên kết biểu định kiểu và liên kết javascript trong đầu trang, v.v. để tương tác với các phần tử trang. Vì vậy, bây giờ, bạn thực sự có thể cần phải biết ...

+0

Opera và Safari có hỗ trợ JS tiêu chuẩn tốt hơn so với Chrome. Xem: http://sputnik.googlelabs.com/ – Savageman

3

Đối với tất cả các tiêu chuẩn nazis ...đôi khi bạn có thể muốn sử dụng chảy máu "công nghệ tiêu chuẩn" mà không chỉ là tiêu chuẩn nhưng họ sẽ được ... Chẳng hạn như tính năng css3.

Đó là lý do tại sao tôi tìm thấy trang này.

Vì một số lý do, Safari chạy kết hợp bán kính đường viền với hộp đổ bóng tốt, nhưng chrome không hiển thị kết hợp chính xác. Vì vậy, nó sẽ được tốt đẹp để tìm một cách để phát hiện chrome mặc dù nó là webkit để vô hiệu hóa sự kết hợp.

Tôi đã chạy vào hàng trăm lý do để phát hiện trình duyệt/phiên bản cụ thể mà thường kết thúc trong tháo dỡ một ý tưởng cho một tính năng thú vị vì những gì tôi muốn làm là không được hỗ trợ bởi tà ác lớn ...

Nhưng đôi khi, một số tính năng chỉ là quá mát mẻ để không sử dụng chúng, ngay cả khi chúng chưa được chuẩn hóa.

0

tôi sử dụng mã này để làm bookmark cho mỗi trình duyệt (hoặc hiển thị một thông điệp cho webkit)

 
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

Câu trả lời này là rất lạc hậu, nhưng nó rất phù hợp trở lại sau đó trong thời kỳ đồ đá.

Tôi cho rằng tính năng phát hiện hữu ích hơn navigator.userAgent phân tích cú pháp, khi tôi googled Opera ambiguosity here. Không ai có thể biết nếu IE16 sẽ phân tích cú pháp/MSIE 16.0;/regexp - nhưng chúng ta có thể khá chắc chắn, sẽ có sự hỗ trợ document.all. Trong cuộc sống thực, các tính năng thường là từ đồng nghĩa cho các trình duyệt, như: "Không có XMLHttpRequest? Nó là f .... d IE6!" Không trình duyệt nonIE nào hỗ trợ document.all, nhưng một số trình duyệt như Maxthon có thể tranh giành userAgent. (Tất nhiên script có thể định nghĩa document.all trong Firefox vì một số lý do, nhưng nó là easilly controlsable.) Vì vậy, tôi đề nghị giải pháp này.

Chỉnh sửaHere Tôi tìm thấy tài nguyên hoàn chỉnh.

Chỉnh sửa 2 Tôi đã kiểm tra tài liệu đó.all cũng được hỗ trợ bởi Opera!

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 
} 

Sử dụng rất đơn giản:

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

giống như nói: bạn có tóc vàng và răng trắng không? Bạn phải là Brad Pitt ... – galambalazs

+1

Bạn có ý nghĩa gì về omg no? Đây chính xác là những gì phát hiện tính năng. –

1

Tôi thường sử dụng phát hiện hành vi/khả năng. Trực tiếp kiểm tra xem trình duyệt có hỗ trợ chức năng trước khi làm việc xung quanh nó hay không, thay vì làm việc xung quanh nó dựa trên những gì có thể là tên của trình duyệt (tác nhân người dùng).

Sự cố với cách giải quyết cụ thể của trình duyệt, là bạn không biết liệu lỗi đã được khắc phục hay chưa hoặc tính năng này có được hỗ trợ ngay bây giờ hay không. Khi bạn phát hiện khả năng, bạn biết trình duyệt hiện không hỗ trợ trực tiếp và bạn không chỉ là trình duyệt.

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

0

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

isIE6:. Typeof document.createElement ('DIV') style.maxHeight == "không xác định",

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

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

isGecko: navigator. sản phẩm == 'Gecko',

isOpera: !! window.opera,

isChrome: !! window.chrome,

isWebkit: !!,

+1

FYI, 'isIE' không hoạt động ngay bây giờ khi IE9 hỗ trợ' window.addEventListener'. Một kiểm tra bền vững cho IE không nên phá vỡ mỗi phiên bản mới của IE. – jfriend00

Các vấn đề liên quan