ChromeDetector

Chrome tarayıcıyı tespit etme ve versiyonunu alma

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.org/scripts/582434/1849851/ChromeDetector.js

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         ChromeDetector
// @namespace    http://tampermonkey.net/
// @version      1
// @description  Chrome tarayıcıyı tespit etme ve versiyonunu alma
// @author       Atilla
// @license MIT
// ==/UserScript==

/**
 * ============================================================================
 * 🚀 ULTRA SECURE CHROME DETECTOR (POWERED BY BOWSER)
 * ============================================================================
 * 
 * En Kolay Kullanım Örnekleri:
 * 
 * 1. Tarayıcı Gerçek Google Chrome mu? (True/False):
 *    if (ChromeDetector.isChrome()) { console.log("Evet, kesinlikle Chrome!"); }
 * 
 * 2. Chrome Ana Versiyonunu Alma:
 *    const version = ChromeDetector.getMajorVersion(); // Örn: 124 veya null
 * 
 * 3. Detaylı Rapor Alma:
 *    const info = ChromeDetector.getInfo(); // { isChrome: true, majorVersion: 124 }
 * ============================================================================
 */

(function (global) {
  'use strict';

  // Bowser kütüphanesini sayfaya dinamik olarak enjekte eden yardımcı fonksiyon
  function injectBowser() {
    if (global.bowser) return;
    const script = document.createElement('script');
    script.src = 'https://cdnjs.cloudflare.com/ajax/libs/bowser/2.12.1/bundled.js';
    script.async = false; // Kodun sıralı çalışması için senkronize yükleme simülasyonu
    document.head.appendChild(script);
  }

  // Sayfa yüklenirken Bowser'ı arka planda hazırla
  if (typeof document !== 'undefined') {
    injectBowser();
  }

  class ChromeDetector {
    /**
     * Bowser parser nesnesini döndürür.
     * @private
     */
    static _getParser() {
      if (!global.bowser) {
        // Eğer Bowser henüz yüklenmediyse anlık olarak userAgent analizi için fallback yapar
        console.warn("ChromeDetector: Bowser henüz tamamen yüklenmedi, bekleniyor...");
        return null;
      }
      return global.bowser.getParser(global.navigator.userAgent);
    }

    /**
     * Kullanıcının gerçek Google Chrome kullanıp kullanmadığını doğrular.
     * Edge, Opera, Brave, Vivaldi vb. tüm yan sanayi Chromium tarayıcıları eler.
     * @returns {boolean}
     */
    static isChrome() {
      const parser = this._getParser();
      if (!parser) {
        // Bowser yüklenene kadar temel JavaScript kontrolü (Geçici Fallback)
        return navigator.vendor === 'Google Inc.' && !navigator.brave && !navigator.userAgent.includes('Edg');
      }

      // Bowser motor adının Blink (Chrome motoru) ve tarayıcı adının tam olarak Chrome olduğunu doğrular
      const browserName = parser.getBrowserName(); // "Chrome"
      const engineName = parser.getEngineName();   // "Blink"

      return browserName === 'Chrome' && engineName === 'Blink';
    }

    /**
     * Chrome'un Major (Ana) sürüm numarasını sayı (number) olarak döndürür.
     * Tarayıcı Chrome değilse null döner.
     * @returns {number|null} Örn: 124 veya null
     */
    static getMajorVersion() {
      if (!this.isChrome()) return null;

      const parser = this._getParser();
      if (!parser) {
        const match = global.navigator.userAgent.match(/(?:Chrome|CriOS)\/([0-9]+)/);
        return match ? parseInt(match[1], 10) : null;
      }

      const versionStr = parser.getBrowserVersion(); // Örn: "124.0.6367.61"
      if (!versionStr) return null;

      return parseInt(versionStr.split('.')[0], 10);
    }

    /**
     * Tüm bilgileri tek bir pratik nesne (object) içinde döndürür.
     * @returns {Object} { isChrome: boolean, majorVersion: number|null }
     */
    static getInfo() {
      return {
        isChrome: this.isChrome(),
        majorVersion: this.getMajorVersion()
      };
    }
  }

  // Global window nesnesine bağlama (Evrensel kütüphane desteği)
  if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
    module.exports = ChromeDetector;
  } else {
    global.ChromeDetector = ChromeDetector;
  }

})(typeof window !== 'undefined' ? window : this);