Komut dosyalarını etkin sekmeye ekle

Uzantı araç çubuğu simgesini tıklayarak geçerli sayfanın stilini basitleştirin.

Genel bakış

Bu eğitim, Chrome uzantısının ve Chrome Web Mağazası doküman sayfalarının stilini daha kolay okunacak şekilde basitleştiren bir uzantı oluşturmaktadır.

Bu kılavuzda, aşağıdakilerin nasıl yapılacağını açıklayacağız:

  • Etkinlik koordinatörü olarak uzantı hizmeti çalışanını kullanın.
  • "activeTab" izniyle kullanıcı gizliliğini koruyun.
  • Kullanıcı, uzantı araç çubuğu simgesini tıkladığında kodu çalıştırın.
  • Scripting API'sini kullanarak bir stil sayfası ekleyin ve kaldırın.
  • Kodu yürütmek için klavye kısayolu kullanın.

Başlamadan önce

Bu kılavuzda, temel web geliştirme deneyiminiz olduğu varsayılmaktadır. Uzantı geliştirme iş akışına giriş için Hello World sayfasına göz atmanızı öneririz.

Uzantıyı oluşturun

Başlamak için uzantının dosyalarını barındıracak focus-mode adında yeni bir dizin oluşturun. Dilerseniz kaynak kodun tamamını GitHub'dan indirebilirsiniz.

1. Adım: Uzantı verilerini ve simgelerini ekleyin

manifest.json adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin.

{
  "manifest_version": 3,
  "name": "Focus Mode",
  "description": "Enable focus mode on Chrome's official Extensions and Chrome Web Store documentation.",
  "version": "1.0",
  "icons": {
    "16": "images/icon-16.png",
    "32": "images/icon-32.png",
    "48": "images/icon-48.png",
    "128": "images/icon-128.png"
  }
}

Bu manifest anahtarları hakkında daha fazla bilgi edinmek için uzantının meta verilerini ve simgelerini daha ayrıntılı bir şekilde açıklayan "Komut dosyalarını her sekmede çalıştırma" eğiticisine göz atın.

Bir images klasörü oluşturun, ardından simgeleri indirin.

2. Adım: Uzantıyı başlatın

Uzantılar, uzantının hizmet çalışanını kullanarak tarayıcı etkinliklerini arka planda izleyebilir. Service Worker'lar, etkinlikleri işleyen ve gerekli olmadığında sona eren özel JavaScript ortamlarıdır.

Hizmet çalışanını manifest.json dosyasına kaydederek başlayın:

{
  ...
  "background": {
    "service_worker": "background.js"
  },
  ...
}

background.js adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:

chrome.runtime.onInstalled.addListener(() => {
  chrome.action.setBadgeText({
    text: "OFF",
  });
});

Hizmet çalışanımızın dinleyeceği ilk etkinlik runtime.onInstalled() olur. Bu yöntem, uzantının bir başlangıç durumu belirlemesine veya yükleme sırasında bazı görevleri tamamlamasına olanak tanır. Uzantılar, uygulama durumunu depolamak için Storage API ve IndexedDB'yi kullanabilir. Ancak bu durumda, yalnızca iki durumu ele aldığımızdan uzantının "AÇIK" mı yoksa "KAPALI" mı olduğunu izlemek için işlem rozeti metnini kullanırız.

3. Adım: Uzantı işlemini etkinleştirin

Uzantı işlemi, uzantının araç çubuğu simgesini kontrol eder. Dolayısıyla, kullanıcı uzantı simgesini tıkladığında bir kod çalıştırır (bu örnekte olduğu gibi) veya bir pop-up görüntüler. manifest.json dosyasında uzantı işlemini bildirmek için aşağıdaki kodu ekleyin:

{
  ...
  "action": {
    "default_icon": {
      "16": "images/icon-16.png",
      "32": "images/icon-32.png",
      "48": "images/icon-48.png",
      "128": "images/icon-128.png"
    }
  },
  ...
}

Kullanıcı gizliliğini korumak için ActiveTab iznini kullanın

activeTab izni, uzantıya etkin sekmede geçici kod yürütme yetkisi verir. Ayrıca, geçerli sekmenin hassas özelliklerine erişim sağlar.

Bu izin, kullanıcı uzantıyı çağırdığında etkinleştirilir. Bu durumda, kullanıcı, uzantı işlemini tıklayarak uzantıyı çağırır.

💡 Kendi uzantımda ActiveTab iznini etkinleştiren diğer kullanıcı etkileşimleri hangileri?

  • Bir klavye kısayolu kombinasyonuna basma.
  • İçerik menüsü öğesi seçme.
  • Çok amaçlı adres çubuğundan gelen öneriler kabul ediliyor.
  • Uzantı pop-up'ı açılıyor.

"activeTab" izni, kullanıcıların uzantıyı odaklanan sekmede kasıtlı olarak çalıştırmasını sağlar. Bu şekilde, kullanıcının gizliliğini korur. Bu özelliğin bir diğer avantajı da izin uyarısı tetiklememesidir.

"activeTab" iznini kullanmak için manifest dosyasının izin dizisine ekleyin:

{
  ...
  "permissions": ["activeTab"],
  ...
}

4. Adım: Mevcut sekmenin durumunu izleyin

Kullanıcı, uzantı işlemini tıkladıktan sonra uzantı, URL'nin bir belge sayfasıyla eşleşip eşleşmediğini kontrol eder. Daha sonra, mevcut sekmenin durumunu kontrol eder ve bir sonraki durumu ayarlar. background.js içine aşağıdaki kodu ekleyin:

const extensions = 'https://developer.chrome.com/docs/extensions'
const webstore = 'https://developer.chrome.com/docs/webstore'

chrome.action.onClicked.addListener(async (tab) => {
  if (tab.url.startsWith(extensions) || tab.url.startsWith(webstore)) {
    // Retrieve the action badge to check if the extension is 'ON' or 'OFF'
    const prevState = await chrome.action.getBadgeText({ tabId: tab.id });
    // Next state will always be the opposite
    const nextState = prevState === 'ON' ? 'OFF' : 'ON'

    // Set the action badge to the next state
    await chrome.action.setBadgeText({
      tabId: tab.id,
      text: nextState,
    });
  }
});

5. Adım: Stil sayfasını ekleyin veya kaldırın

Şimdi sayfanın düzenini değiştirme zamanı geldi. focus-mode.css adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:

body > .scaffold > :is(top-nav, navigation-rail, side-nav, footer),
main > :not(:last-child),
main > :last-child > navigation-tree,
main .toc-container {
  display: none;
}

main > :last-child {
  margin-top: min(10vmax, 10rem);
  margin-bottom: min(10vmax, 10rem);
}

Stil sayfasını Scripting API'sini kullanarak ekleyin veya kaldırın. Manifest'te "scripting" iznini bildirerek başlayın:

{
  ...
  "permissions": ["activeTab", "scripting"],
  ...
}

Son olarak, background.js dilinde sayfanın düzenini değiştirmek için aşağıdaki kodu ekleyin:

  ...
    if (nextState === "ON") {
      // Insert the CSS file when the user turns the extension on
      await chrome.scripting.insertCSS({
        files: ["focus-mode.css"],
        target: { tabId: tab.id },
      });
    } else if (nextState === "OFF") {
      // Remove the CSS file when the user turns the extension off
      await chrome.scripting.removeCSS({
        files: ["focus-mode.css"],
        target: { tabId: tab.id },
      });
    }
  }
});

💡 Kod eklemek için stil sayfası yerine Scripting API'yi kullanabilir miyim?

Evet. JavaScript yerleştirmek için scripting.executeScript() kullanabilirsiniz.

İsteğe bağlı: Klavye kısayolu atama

Yalnızca eğlence olsun diye bir kısayol ekleyerek odak modunu daha kolay etkinleştirip devre dışı bırakabilirsiniz. "commands" anahtarını manifest dosyasına ekleyin.

{
  ...
  "commands": {
    "_execute_action": {
      "suggested_key": {
        "default": "Ctrl+B",
        "mac": "Command+B"
      }
    }
  }
}

"_execute_action" anahtarı, action.onClicked() etkinliğiyle aynı kodu çalıştırır. Bu nedenle ek kod gerekmez.

Çalışıp çalışmadığını test edin

Projenizin dosya yapısının aşağıdaki gibi olduğunu doğrulayın:

Odak modu klasörünün içeriği: manifest.json, background.js, odak-mode.css ve images klasörü.

Uzantınızı yerel olarak yükleme

Geliştirici modunda paketlenmemiş bir uzantıyı yüklemek için Hello World'deki adımları uygulayın.

Uzantıyı bir doküman sayfasında test edin

İlk olarak aşağıdaki sayfalardan herhangi birini açın:

Ardından, uzantı işlemini tıklayın. Bir klavye kısayolu oluşturduysanız Ctrl + B veya Cmd + B tuşlarına basarak test edebilirsiniz.

Şuradan alınmalıdır:

Konsantrasyon Modu uzantısı KAPALI
Konsantrasyon Modu uzantısı kapalı

Şu işleme:

Konsantrasyon Modu uzantısı AÇIK
Konsantrasyon Modu uzantısı açık

🎯 Olası iyileştirmeler

Bugün öğrendiklerinizi temel alarak aşağıdakilerden herhangi birini yapmaya çalışın:

  • CSS stil sayfasını iyileştirin.
  • Farklı bir klavye kısayolu atayın.
  • Favori blog veya doküman sitenizin düzenini değiştirin.

Kanalınızı geliştirin.

Tebrikler, bu eğitimi tamamladınız 🎉. Bu serideki diğer eğiticileri tamamlayarak becerilerinizi geliştirmeye devam edin:

Uzantı Öğrenecekleriniz
Okuma süresi Öğeleri belirli bir sayfa grubuna otomatik olarak eklemek için.
Sekme Yöneticisi Tarayıcı sekmelerini yöneten bir pop-up oluşturmak için

Keşfetmeye devam edin

Bu Chrome uzantısını oluşturmaktan keyif aldığınızı ve uzantı geliştirme ile ilgili öğrenme yolculuğunuza devam etmek için sabırsızlandığınızı umuyoruz. Aşağıdaki öğrenme yollarını öneririz:

  • Geliştirici kılavuzunda, gelişmiş uzantı oluşturmayla ilgili belgelere ait düzinelerce ek bağlantı bulunmaktadır.
  • Uzantıların, açık web'de bulunanların ötesinde güçlü API'lere erişimi vardır. Her API için Chrome API'leri dokümanlarında adım adım yol gösterilir.