Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/mercuryworkshop/scramjet/llms.txt

Use this file to discover all available pages before exploring further.

The ScramjetController class manages Scramjet instances, handles configuration, and provides frame creation. It extends EventTarget to support listening for global Scramjet events.

Constructor

Creates a new ScramjetController instance.
new ScramjetController(config: Partial<ScramjetInitConfig>)
config
Partial<ScramjetInitConfig>
required
Configuration options for Scramjet. See config types for details.

Example

const { ScramjetController } = $scramjetLoadController();

const scramjet = new ScramjetController({
  prefix: "/scramjet/",
  flags: {
    serviceworkers: false,
    syncxhr: false,
    strictRewrites: true,
    captureErrors: true
  }
});

Methods

init()

Initializes the controller by loading codecs, opening IndexedDB, and setting up message listeners.
async init(): Promise<void>
You must call init() before using other methods on the controller.

Example

await scramjet.init();

createFrame()

Creates a new ScramjetFrame instance for managing an iframe.
createFrame(frame?: HTMLIFrameElement): ScramjetFrame
frame
HTMLIFrameElement
Optional existing iframe element. If not provided, a new iframe is created.

Returns

A ScramjetFrame instance for managing the iframe.

Example

const frame = scramjet.createFrame();
document.body.appendChild(frame.frame);
frame.go("https://example.com");

encodeUrl()

Encodes a real URL into a Scramjet-proxied URL.
encodeUrl(url: string | URL): string
url
string | URL
required
The real URL to encode

Returns

The encoded URL with the Scramjet prefix.

Example

const proxiedUrl = scramjet.encodeUrl("https://example.com");
// Returns: "/scramjet/https%3A%2F%2Fexample.com"
Only HTTP and HTTPS URLs are encoded. Other protocols are returned unchanged.

decodeUrl()

Decodes a Scramjet-proxied URL back to the real URL.
decodeUrl(url: string | URL): string
url
string | URL
required
The proxied URL to decode

Returns

The decoded real URL.

Example

const realUrl = scramjet.decodeUrl("/scramjet/https%3A%2F%2Fexample.com");
// Returns: "https://example.com"

modifyConfig()

Dynamically updates the Scramjet configuration.
async modifyConfig(newconfig: Partial<ScramjetInitConfig>): Promise<void>
newconfig
Partial<ScramjetInitConfig>
required
The configuration properties to update

Example

await scramjet.modifyConfig({
  flags: {
    captureErrors: false,
    strictRewrites: false
  }
});
Configuration changes are persisted to IndexedDB and synchronized with the service worker.

addEventListener()

Adds an event listener for Scramjet global events.
addEventListener<K extends keyof ScramjetGlobalEvents>(
  type: K,
  listener: (event: ScramjetGlobalEvents[K]) => void,
  options?: boolean | AddEventListenerOptions
): void
type
'download'
required
The event type to listen for
listener
Function
required
The callback function to execute when the event fires
options
boolean | AddEventListenerOptions
Event listener options

Example

scramjet.addEventListener("download", (event) => {
  console.log("Download intercepted:", event.download.filename);
  console.log("URL:", event.download.url);
});

Events

download

Fired when a download is intercepted by Scramjet.
interface ScramjetGlobalDownloadEvent extends Event {
  type: "download";
  download: ScramjetDownload;
}
See event types for the full ScramjetDownload interface.

Build docs developers (and LLMs) love