This directory contains TypeScript code that gets injected into Instagram's web page via cordova-plugin-inappbrowser's insertScript() method.
Unlike main.ts which runs in the Capacitor WebView, code in this directory runs inside Instagram's DOM with access to:
- Instagram's page DOM
- Instagram's
localStorage - No access to Cordova/Capacitor APIs
Both main.ts and injected/addmenu.ts are bundled separately to create two isolated bundles:
# Two separate build outputs
bun build src/main.ts --outdir www/js
bun build src/injected/addmenu.ts --outdir www/js/injected- Different execution contexts - Main runs in Capacitor, injected runs in Instagram
- No shared dependencies - Each bundle is completely self-contained
- Different capabilities - Injected code can't access Cordova APIs, main code can't access Instagram's DOM
- Build time:
addmenu.tsis bundled with all its npm dependencies - Runtime data loading:
app/main.tsloads HTML templates and CSS rules - Data injection:
app/main.tsinjects data aswindow.__JUSTAGRAM_DATA__global variable - Script injection:
app/main.tsinjects the bundledaddmenu.jswhich reads from the global - Execution: Script initializes the menu using the provided data
// In app/main.ts (Capacitor context)
const data = {
menuButtonHTML: '...',
menuHTML: '...',
cssRules: { hideReels: '...', ... }
};
browser.insertScript({ code: `window.__JUSTAGRAM_DATA__ = ${JSON.stringify(data)}` });
browser.insertScript({ code: addMenuJS });
// In injected/addmenu.ts (Instagram context)
const data = window.__JUSTAGRAM_DATA__;
const cssRules = data.cssRules;
const menuButtonHTML = data.menuButtonHTML;
// ... use the dataYou can import npm packages in addmenu.ts and they'll be bundled automatically:
import { debounce } from 'lodash-es';
const handleToggle = debounce(() => {
// Your code
}, 300);The bundled output will include lodash code inline, making it work inside Instagram's CSP-restricted environment.
To debug injected code:
- Android: Use
chrome://inspectwhile app is running - iOS: Use Safari Developer Tools
The injected bundle includes source maps for easier debugging.