Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi

Yayın: 9 Ocak 2024

Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi

Benim gibi bir web sitesini işletirken (www.danyelkoca.com) sitenizi ziyaret eden insanlar hakkında bilgi edinmek son derece önemlidir.

Ölçmediğiniz şeyi geliştiremezsiniz.

Peter Drucker

Kullanıcılarınızla ilgili önemli bir bilgi, sitenizi ziyaret ettikleri sırada kullandıkları cihaz ve tarayıcıdır.

Neden? Bu bilgi, aşağıdaki gibi örnek eylemlerle sitenizi geliştirmenize yardımcı olabilir:

  1. En yaygın olarak kullanılan cihaz ve tarayıcılar hakkında bilgi edinin ve sitenizi buna göre uyarlayın
  2. Topluluğun yarar sağlamayacak azınlık cihaz ve tarayıcılara (örneğin, Tablet cihaz, Opera tarayıcısı) öncelik vermekten kaçının
  3. Belirli cihazlar ve tarayıcılara özgü desenleri belirleyin (Örneğin, Safari'de belirli bir fonksiyonun kullanılmaması)

Şimdi kodumuza derinlemesine bakalım!

1. Cihaz Tespiti

Cihazı tanımlamak için JavaScript'te window.navigator.userAgent işlevini kullanırız. Bu işlev aşağıdaki gibi bir dize döndürür:

console.log(window.navigator.userAgent);
// >> Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

Sonuç, bilgisayarımda gördüğüm şeydir, yani Chrome Tarayıcısı ile kullanılan bir MacBook Pro.

Sonucu analiz edelim:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

Bu işlevin sadece cihazı çıkarmadığını görüyoruz

Macintosh; Intel Mac OS X 10_15_7

ancak diğer bilgileri de döndürür

Mozilla/5.0, AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

Şimdilik, cihazı ifade eden çıktının bir kısmına odaklanıyoruz

Macintosh; Intel Mac OS X 10_15_7

Bu, bu web sitesine bir MacBook üzerinden eriştiğimi doğru bir şekilde anlar, ancak bu MacBook'un modeli hakkında bilgi yoktur (Örneğin, Air, Pro)

Ayrıca, birden fazla şeyi yanlış alır. MacBook'um Intel çipi kullanmıyor (M1) ve macOS 10.15.7 kullanmıyor.

Dolayısıyla, cihazı belirlemek için bu işlevi kullanırken, yalnızca cihazı çıkarın, çünkü cihazın modeli ve cihazda çalışan işletim sistemi yanıltıcı olabilir.

userAgent dizesini kullanarak, kullanıcının cihazını, bu StackOverflow yanıtı tarafından verilen koşullara dayanarak mobil veya masaüstü olarak sınıflandırmak için bir regex yazabiliriz.

let userAgentString = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
	
function deviceDetection(userAgentString) {
	let device = 'Masaüstü';

	if (
		/(android|bbd+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
			userAgentString
		)
	) {
		device = 'Mobil';
	}

	return device;
}

console.log(browserDetection(userAgentString));
// >> Masaüstü

2. Tarayıcı Tespiti

Sadece tarayıcıyı ifade eden çıktıya odaklanalım

Mozilla/5.0, AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

userAgent üzerinden tarayıcı tespiti son derece karmaşıktır, çünkü bu çıktı kendisi 3 tarayıcıyı içerir:

  1. Mozilla/5.0 (Firefox?)
  2. Chrome/120.0.0.0
  3. Safari/537.36

MDN Web Dokümantasyonları'na göre, UserAgent dizesini kullanarak tarayıcı hakkında çıkarımda bulunmak için aşağıdaki tablo kullanılabilir:

Motor İçermesi Gereken İçermemesi Gereken
Firefox Firefox/xyz Seamonkey/xyz
Seamonkey Seamonkey/xyz
Chrome Chrome/xyz Chromium/xyz veya Edg.*/xyz
Chromium Chromium/xyz
Safari Safari/xyz Chromium/xyz veya Edg.*/xyz
Opera 15+ (Blink tabanlı motor) OPR/xyz
Opera 15+ (Presto tabanlı motor) Opera/xyz

MDN tarafından belirtilen koşullara dayanarak tarayıcıyı tanımlamak için bir regex yazalım.

let userAgentString = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';

function browserDetection(userAgentString) {
	let browser = 'bilinmeyen';

	if (/Firefox/.*/.test(userAgentString) && !/Seamonkey/.*/.test(userAgentString))
		browser = 'Firefox';
	else if (/Seamonkey/.*/.test(userAgentString)) browser = 'Seamonkey';
	else if (
		/Chrome/.*/.test(userAgentString) &&
		!/Chromium/.*/.test(userAgentString) &&
		!/Edg.*/.*/.test(userAgentString)
	)
		browser = 'Chrome';
	else if (/Chromium/.*/.test(userAgentString)) browser = 'Chromium';
	else if (
		/Safari/.*/.test(userAgentString) &&
		!/Chromium/.*/.test(userAgentString) &&
		!/Edg.*/.*/.test(userAgentString)
	)
		browser = 'Safari';
	else if (/OPR/.*/.test(userAgentString)) browser = 'Opera 15+ (Blink tabanlı motor)';
	else if (/Opera/.*/.test(userAgentString)) browser = 'Opera 15+ (Presto tabanlı motor)';

	return browser;
}

console.log(browserDetection(userAgentString));
// >> Chrome

Tarayıcıyı başarıyla sınıflandırdık, ki bu gerçekten de Chrome idi. Ancak dikkatli gözler, userAgent dizesimin Safari'nin koşullarını da karşıladığını fark edecektir. Chrome koşulu, Safari'den önce test edildiği için tarayıcı Chrome olarak sınıflandırılır, ancak Chrome'dan önce Safari'yi test etmek her zaman beklenen sonuçları verir mi, bunun için daha fazla test yapılması gerekmektedir.

3. Sonuç

Yukarıdaki 2 işlevi kullanarak - deviceDetection, browserDetection - artık kullanıcılarınızın cihazını ve tarayıcısını başarılı bir şekilde sınıflandırabilirsiniz. window.navigator.userAgent tüm modern tarayıcılarla uyumlu olduğundan, bunu güvenle kullanabilirsiniz. Herhangi bir sorunuz varsa, aşağıdaki yorum bölümünde bana bildirebilirsiniz.

Mutlu kodlamalar!

Bu blog İngilizce'den ChatGPT ile çevrilmiştir. Herhangi bir belirsizlik durumunda İletişim sayfasından bana ulaşabilirsiniz.

Yorum bırak

Yorumlar

Diğer bloglara bak

Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi

2024/06/19

Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi

JavaScriptSvelteKolayBasitDinamikTooltipFront-end
JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun

2024/06/17

JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun

SvelteSVGJavaScriptTailwindInteraktif HaritaTokyoJaponya23 WardsTokyo Metropolitan Bölgesi
Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi

2024/06/14

Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi

MatplotlibGrafikÇizimPythonJaponca KarakterlerSorunBug
Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell

2024/06/13

Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell

Kitap İncelemesiÖtekiyle KonuşmakTalking to StrangersMalcolm Gladwell
Japonca'da En Sık Kullanılan 3.000 Kanji

2024/06/07

Japonca'da En Sık Kullanılan 3.000 Kanji

3000Kullanma YayginligiKanji KullanimiKanjiJaponcaKanji ListesiKanji YayginligiJLPTJaponca CalismaOgrenmeYaygin Japonca Kelimeler
VSCode'da Regex Kullanarak Replace Yapma Yöntemi

2024/06/07

VSCode'da Regex Kullanarak Replace Yapma Yöntemi

VSCodeRegexAramaDeğiştirmeKoşullu DeğiştirmeFindReplaceConditional Replace
Svelte'de Readable Store Kullanmayın

2024/06/06

Svelte'de Readable Store Kullanmayın

SvelteReadableWritableState ManagementStoreHızBellekDosya Boyutu
Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın

2024/06/05

Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın

GzipSıkıştırmaPakoWeb SitesiYükleme HızıSvelteKit
Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun

2024/05/31

Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun

JavascriptFarePointerHoverWeb Geliştirme
Svelte ve SVG ile Interaktif Harita Oluşturun

2024/05/29

Svelte ve SVG ile Interaktif Harita Oluşturun

SvelteSVGInteraktif HaritaFront-end
Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg

2024/05/28

Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg

Kitap İncelemesiGeleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor?Originals: How Non-Conformists Move the WorldAdam Grant & Sheryl Sandberg
Javascript Kullanarak Sudoku Nasıl Çözülür?

2024/05/27

Javascript Kullanarak Sudoku Nasıl Çözülür?

Sudoku ÇözümAlgoritmaJavaScriptKodlama
Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?

2024/05/26

Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?

Website Trafik ArtırmaClick (Tıklama)Impression (Gösterim)Google Search Console
Hayat Bisiklet Sürmek Gibidir

2024/05/24

Hayat Bisiklet Sürmek Gibidir

BisikletHayatFilozofiBaşarı
JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun

2024/05/19

JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun

SudokuBacktracking AlgoritmasıTamamlanmış SudokuJavaScript
Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?

2024/05/16

Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?

TailwindHarikaFront-endWeb Geliştirme
Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma

2024/05/15

Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma

Git HooksPythonSite HaritasıSvelteKit
Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein

2024/05/14

Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein

Kitap İncelemesiRange(Çok Yönlü)David EpsteinBaşarı İçin Neden Çok Şeyle İlgilenmeliyiz?
Svelte ve SvelteKit nedir?

2024/05/13

Svelte ve SvelteKit nedir?

SvelteSvelteKitFront-endVite
SvelteKit ile Internationalization (Çoklu Dil Desteği)

2024/05/12

SvelteKit ile Internationalization (Çoklu Dil Desteği)

InternationalizationÇoklu Dil DestegiSvelteKitI18N
Svelte'de Caching ile Deploy Süresini Azaltın

2024/05/11

Svelte'de Caching ile Deploy Süresini Azaltın

SvelteEnhanced ImageCachingDeploy Suresi
Svelte ve Intersection Oberver ile Lazy-Load

2024/05/10

Svelte ve Intersection Oberver ile Lazy-Load

Lazy LoadingWebsite Hiz OptimizasyonuSvelteIntersection Observer
Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu

2024/05/10

Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu

Hisse SenediPortföy OptimizasyonuGenetik AlgoritmaPython
ShapeFile Formatini SVG Formatina Degistirme Yontemi

2024/05/09

ShapeFile Formatini SVG Formatina Degistirme Yontemi

ShapeFileSVGPythonGeoJSON
Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu

2024/05/08

Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu

SvelteSayfa GuncellemeBindingKey Fonksiyonu
Kitap İncelemesi | Savaş Sanatı - Sun Tzu

2024/05/07

Kitap İncelemesi | Savaş Sanatı - Sun Tzu

Kitap İncelemesiThe Art of War (Savaş Sanatı)Sun TzuThomas Cleary
Specialistlik Bitti. Yaşasın Generalistlik!

2024/05/06

Specialistlik Bitti. Yaşasın Generalistlik!

GenelUzmanParadigma DegisimiYazilim Muhendisligi
2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi

2024/05/03

2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi

PythonSecmen Profil Analizi2018 Milletvekili SecimleriSecmen Yas Analizi
Python Selenium Ile Secmen Veritabani Olusturma

2024/05/01

Python Selenium Ile Secmen Veritabani Olusturma

PythonSeleniumVeri KazimaMilletvekili Secimleri
Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi

2024/04/30

Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi

SvelteTailwindInfinite ScrollFront-end
1 Yıl İçerisinde Japonca Konuşabilmek

2024/04/29

1 Yıl İçerisinde Japonca Konuşabilmek

JaponcaDil yeterliligiJLPTKisa zamanda dil ogrenme
Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu

2024/04/25

Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu

Website SablonuFront-endSvelteTailwind
Tembel Muhendisler Kotu Urunler Yapar

2024/01/29

Tembel Muhendisler Kotu Urunler Yapar

Tembel MuhendisKotu UrunStarbucksSBI
Mukemmellik Uzerine

2024/01/28

Mukemmellik Uzerine

MukemmellikHayatin anlamiTatmin Edici HayatAmac
MacBook'ta PDF'i PNG'ye Cevirme Yontemi

2024/01/28

MacBook'ta PDF'i PNG'ye Cevirme Yontemi

PDFPNGMacBookAutomator
2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap

2023/12/31

2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap

KitapOkuma2023Geriye Bakma
Python PIL Kullarak Foto Kolaji Yapma Yontemi

2023/12/30

Python PIL Kullarak Foto Kolaji Yapma Yontemi

PythonPILGörüntü işlemeKolaj
ChatGPT Cevap Anatomisi

2024/01/19

ChatGPT Cevap Anatomisi

ChatGPTBuyuk Dil ModeliMakina OgrenimiYapay Zeka