Yo, Frontend Devs! Coba bayangin skenario ini: Lo lagi asyik koding web app impian lo. Idenya brilian, lo mau bikin dashboard tracker harga e-commerce, atau tool penganalisa SEO website kompetitor.
Lo tulis fungsi fetch() pakai Vanilla JS. Lo tekan Save. Lo buka browser. Dan... BAM! Console log lo penuh dengan teks merah mematikan ini:
β
Access to fetch at 'https://target-web.com' from origin 'http://localhost' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Rasanya pengen banting keyboard, kan?
CORS (Cross-Origin Resource Sharing) emang didesain buat keamanan browser, biar script jahat nggak bisa nyolong data user dari tab lain. Tapi buat kita yang pengen bikin legit tools murni di client-side, CORS itu ibarat tembok Berlin.
Solusi tradisionalnya? Lo terpaksa nyewa cloud server, bikin backend proxy pakai Node.js, lempar request UI lo ke server lo sendiri, biarin server lo yang nge-scrape datanya, baru dikirim balik ke UI. Ribet, lambat, dan ngabisin duit.
Tapi, gimana kalau gue bilang di ekosistem Flowork OS, lo bisa menghancurkan tembok CORS itu langsung dari browser user tanpa butuh backend server sama sekali?
Mari kenalan dengan senjata rahasia kita: Flowork Browser Extension (FBE) "God Mode".
π¦ΈββοΈ Apa Itu FBE "God Mode"?
Di dalam arsitektur Flowork OS, aplikasi web lo (Vanilla JS) dilarang keras melakukan fetching langsung ke domain pihak ketiga. Kenapa? Karena pasti diblokir CORS.
Sebagai gantinya, Flowork menyediakan ekosistem pendamping berupa Ekstensi Chrome (FBE). Ekstensi browser punya hak istimewa (privileges) yang nggak dimiliki oleh halaman web biasa. Dengan konfigurasi host_permissions di manifest.json, ekstensi bisa nge-fetch data dari website manapun di internet tanpa peduli aturan CORS.
Inilah yang kita sebut "God Mode". Ekstensi lo adalah dewa yang bisa menembus batas keamanan domain.
ποΈ Arsitektur Komunikasi 3 Lapis (The Magic Flow)
Tentu aja, demi keamanan, web app lo nggak bisa sembarangan nyuruh ekstensi. Harus ada protokol ketat biar "God Mode" ini nggak disalahgunakan. Flowork OS membaginya jadi 3 lapis komunikasi yang super rapi:
Lapis 1: Web App Berteriak (via systemBridge.js)
Di sisi UI, lo cuma butuh satu baris kode buat minta tolong ke FBE. Web app lo bakal berteriak pakai window.postMessage(). Ini adalah cara aman agar Web bisa ngobrol dengan Ekstensi.
// Di dalam aplikasi lo (contoh: SEO Checker App)
// Web App: "Eh Bridge, tolong dong scrape website ini, gue kena CORS nih!"
async function scanCompetitor(url) {
try {
const data = await FloworkBridge.executeExt('seo_checker', {
targetUrl: url
});
console.log("Data mateng tanpa CORS:", data);
} catch (err) {
console.error("Gagal nyuruh ekstensi:", err);
}
}
Lapis 2: Sang Kurir (content_injector.js)
FBE punya agen rahasia bernama content_injector.js yang disuntikkan ke halaman Flowork OS lo. Tugas agen ini cuma satu: nongkrong, nungguin teriakan postMessage dari Web App lo, nangkap pesannya, lalu ngirim pesan itu ke markas besar ekstensi pakai chrome.runtime.sendMessage().
// Ilustrasi kerja content_injector.js (The Courier)
window.addEventListener('message', function(event) {
// Pastikan pesan datang dari Web App Flowork yang sah
if (event.source !== window || !event.data.type || event.data.type !== 'FROM_FLOWORK_APP') {
return;
}
// Tangkap pesannya dan lempar ke Markas Besar (Background Script)
chrome.runtime.sendMessage({
action: event.data.action,
payload: event.data.payload
}, function(response) {
// Balikin jawaban dari markas ke Web App
window.postMessage({ type: 'FROM_FLOWORK_EXT', data: response }, '*');
});
});
Lapis 3: Eksekutor Brutal (background.js & Modules)
Pesan dari kurir akhirnya sampai di markas besar: background.js. Di sinilah "God Mode" aktif. Background script ini bakal ngecek modul apa yang lo panggil (misal: yt_deepscan.js atau seo_checker.js).
Karena script ini jalan di environment ekstensi, dia bisa langsung hajar fetch() ke URL target. Nggak ada CORS. Nggak ada blokir.
// Ilustrasi di dalam flowork/modules/seo_checker.js
async function executeGodModeScrape(payload) {
try {
// π₯ FETCH LANGSUNG KE DOMAIN ORANG LAIN TANPA CORS ERROR!
const response = await fetch(payload.targetUrl, {
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}
});
const htmlText = await response.text();
// Parsing data mentahnya di sini (misal ambil Meta Tags)
const result = parseHTMLBrutally(htmlText);
return { status: "success", data: result };
} catch (error) {
return { status: "error", message: error.message };
}
}
Setelah datanya dapet, Ekstensi bakal ngirim format JSON yang udah matang melewati jalur mundur (Lapis 3 -> Lapis 2 -> Lapis 1) sampai akhirnya muncul cantik di UI Vanilla JS lo.
βοΈ Kenapa Harus Ribet Gini? (Separation of Concerns)
Mungkin lo mikir, "Bro, kenapa nggak koding semuanya aja di dalam ekstensi?"
Jawabannya: Performa dan Kerapian Codebase. * Ekstensi (FBE) itu spesialis tugas "kotor" dan peretasan batasan jaringan.
- Web App lo (UI) itu spesialis visualisasi, animasi, dan state management.
Kalau lo campur aduk semuanya di dalam ekstensi, codebase lo bakal jadi kapal pecah. Dengan arsitektur Flowork OS, lo bisa punya 100 aplikasi kecil yang berbeda (yt-downloader, seo-checker, wa-rotator), tapi semuanya numpang pakai satu Gateway "God Mode" yang sama: FBE.
π― Saatnya Berkuasa Penuh Atas Browser Lo!
Arsitektur "God Mode" ini ngebuktiin bahwa limitasi browser itu ada bukan buat ditangisi, tapi buat diretas pakai cara yang smart dan engineer-friendly.
Dengan kombinasi Web App yang ringan dan Flowork Browser Extension yang brutal, batas antara apa yang bisa dilakukan dan apa yang tidak bisa dilakukan di sisi klien (client-side) akhirnya hancur lebur.
Gimana? Masih mau buang-buang waktu ngurusin backend server cuma buat bypass CORS?
Fork repo-nya, pasang ekstensinya, dan mulailah membangun inovasi liar lo di atas floworkos.com hari ini! ππ»π₯

Top comments (0)