Cara Mengembangkan Browser Extension dengan Claude Code
Pelajari cara mengembangkan browser extension menggunakan Claude Code. Dilengkapi contoh kode praktis dan panduan langkah demi langkah.
Mempercepat Pengembangan Browser Extension dengan Claude Code
Pengembangan Chrome extension membutuhkan banyak pengetahuan seperti spesifikasi Manifest V3, content script, background service worker, dan popup UI. Dengan Claude Code, semua ini bisa di-generate hanya dengan instruksi dalam bahasa alami.
Setup Awal Project
> Buat project Chrome extension.
> Dengan Manifest V3, konfigurasi menggunakan popup screen dan content script.
> Bisa di-build dengan TypeScript + Vite.
Contoh manifest.json yang di-generate Claude Code:
{
"manifest_version": 3,
"name": "My Extension",
"version": "1.0.0",
"description": "Chrome extension dibuat dengan Claude Code",
"permissions": ["storage", "activeTab"],
"action": {
"default_popup": "popup.html",
"default_icon": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
}
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"],
"css": ["content.css"]
}
],
"background": {
"service_worker": "background.js",
"type": "module"
}
}
Implementasi Popup UI
Popup yang ditampilkan saat mengklik ikon extension.
// popup.ts
interface Settings {
enabled: boolean;
highlightColor: string;
fontSize: number;
}
const defaultSettings: Settings = {
enabled: true,
highlightColor: "#ffeb3b",
fontSize: 14,
};
async function loadSettings(): Promise<Settings> {
const result = await chrome.storage.sync.get("settings");
return { ...defaultSettings, ...result.settings };
}
async function saveSettings(settings: Settings) {
await chrome.storage.sync.set({ settings });
// Notifikasi perubahan pengaturan ke content script
const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
if (tab.id) {
chrome.tabs.sendMessage(tab.id, { type: "SETTINGS_UPDATED", settings });
}
}
document.addEventListener("DOMContentLoaded", async () => {
const settings = await loadSettings();
const enabledCheckbox = document.getElementById("enabled") as HTMLInputElement;
const colorInput = document.getElementById("color") as HTMLInputElement;
const fontSizeInput = document.getElementById("fontSize") as HTMLInputElement;
enabledCheckbox.checked = settings.enabled;
colorInput.value = settings.highlightColor;
fontSizeInput.value = String(settings.fontSize);
enabledCheckbox.addEventListener("change", () => {
settings.enabled = enabledCheckbox.checked;
saveSettings(settings);
});
colorInput.addEventListener("input", () => {
settings.highlightColor = colorInput.value;
saveSettings(settings);
});
fontSizeInput.addEventListener("input", () => {
settings.fontSize = parseInt(fontSizeInput.value);
saveSettings(settings);
});
});
Implementasi Content Script
Content script yang memanipulasi konten halaman web. Di sini kita mengimplementasikan fitur highlight teks di halaman.
// content.ts
let settings: Settings = {
enabled: true,
highlightColor: "#ffeb3b",
fontSize: 14,
};
function highlightText(searchTerm: string) {
if (!settings.enabled || !searchTerm) return;
const walker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_TEXT,
null
);
const matches: { node: Text; index: number }[] = [];
while (walker.nextNode()) {
const node = walker.currentNode as Text;
const index = node.textContent?.toLowerCase().indexOf(searchTerm.toLowerCase()) ?? -1;
if (index !== -1) {
matches.push({ node, index });
}
}
matches.reverse().forEach(({ node, index }) => {
const range = document.createRange();
range.setStart(node, index);
range.setEnd(node, index + searchTerm.length);
const highlight = document.createElement("mark");
highlight.style.backgroundColor = settings.highlightColor;
highlight.className = "ext-highlight";
range.surroundContents(highlight);
});
}
function clearHighlights() {
document.querySelectorAll(".ext-highlight").forEach((el) => {
const parent = el.parentNode;
if (parent) {
parent.replaceChild(document.createTextNode(el.textContent || ""), el);
parent.normalize();
}
});
}
// Listener pesan
chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
if (message.type === "HIGHLIGHT") {
clearHighlights();
highlightText(message.term);
sendResponse({ success: true });
}
if (message.type === "SETTINGS_UPDATED") {
settings = message.settings;
}
});
Implementasi Background Service Worker
// background.ts
chrome.runtime.onInstalled.addListener(() => {
// Tambahkan context menu
chrome.contextMenus.create({
id: "highlight-selection",
title: "Highlight teks yang dipilih",
contexts: ["selection"],
});
});
chrome.contextMenus.onClicked.addListener(async (info, tab) => {
if (info.menuItemId === "highlight-selection" && tab?.id) {
await chrome.tabs.sendMessage(tab.id, {
type: "HIGHLIGHT",
term: info.selectionText,
});
}
});
Tentang perbedaan dengan pengembangan CLI tool, lihat Pengembangan CLI Tool. Untuk cara menulis prompt yang efisien, lihat 10 Tips untuk Melipatgandakan Produktivitas 3x.
Summary
Dengan Claude Code, pengembangan Chrome extension bisa dipercepat secara signifikan, mulai dari pengaturan Manifest V3 hingga UI, content script, dan background worker. Serahkan kompleksitas spesifikasi ke Claude Code dan fokus pada ide fitur.
Untuk detail, lihat Dokumentasi Resmi Claude Code.
Related Posts
Cara Mempercepat Side Project dengan Claude Code [Dengan Contoh]
Pelajari cara mempercepat project development personal secara drastis menggunakan Claude Code. Dilengkapi contoh nyata dan workflow praktis dari ide hingga deployment.
Cara Mengotomatisasi Refactoring dengan Claude Code
Pelajari cara mengotomatisasi code refactoring secara efisien menggunakan Claude Code. Dilengkapi prompt praktis dan pola refactoring konkret untuk project nyata.
Panduan Lengkap Konfigurasi CORS dengan Claude Code
Pelajari tentang panduan lengkap konfigurasi CORS menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.