Browser Redirects
By design, when using the .frame API, Frog only renders the HTML <head> and <meta> tags to construct a frame.
It does not render a full HTML document to optimize on frame load performance.
This means that when the user navigates to your Frame URL via the browser, the browser will render a blank page.
If you want to render a full HTML document for a Frame, you can use the browserLocation property to redirect the user
to a new URL that contains the document.
For instance, a user may reach the frame page in their browser by clicking on the link beneath the frame on Warpcast.
We may want to redirect them to a different page (ie. a mint page, etc) using browserLocation when they arrive via their browser.
Examples
Basic (Frog Instance)
In the example below, when a user navigates to the /frame path of the website via their web browser,
they will be redirected to the / path as browserLocation is set on the Frog instance.
import { Button, Frog } from 'frog'
export const app = new Frog({
browserLocation: '/',
title: 'Frog Frame',
})
app.frame('/frame', (c) => {
return c.res({/* ... */})
})Basic (Return Property)
In the example below, when a user navigates to the /frame path of the website via their web browser,
they will be redirected to the / path as browserLocation is set on the return object.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.frame('/frame', (c) => {
return c.res({
browserLocation: '/'
/* ... */
})
})Path Interpolation
We may want to redirect the user to a page based on the path.
In the example below, when a user navigates to the /frame/:foo/:bar (e.g. /frame/a/b) path of the website via their web browser,
they will be redirected to the /:foo/:bar path (e.g. /a/b), provided that the browserLocation and the route share the same template variables (e.g. :foo and :bar).
import { Button, Frog } from 'frog'
export const app = new Frog({
browserLocation: '/:foo/:bar'
title: 'Frog Frame',
})
app.frame('/frame/:foo/:bar', (c) => {
return c.res({/* ... */})
})With Base Paths
browserLocation also works with basePath on the Frog instance.
In the example below, when a user navigates to the /api/foo path of the website via their web browser,
they will be redirected to the /foo path.
import { Button, Frog } from 'frog'
export const app = new Frog({
basePath: '/api',
browserLocation: '/:path',
title: 'Frog Frame',
})
app.frame('/foo', (c) => {
return c.res({/* ... */})
})
app.frame('/bar', (c) => {
return c.res({/* ... */})
})To include the basePath in the browserLocation path, you can use the :basePath template variable.
In the example below, when a user navigates to the /api/foo path of the website via their web browser,
they will be redirected to the /api/foo/dev path.
import { Button, Frog } from 'frog'
export const app = new Frog({
basePath: '/api',
browserLocation: '/:basePath/:path/dev',
title: 'Frog Frame',
})
app.frame('/foo', (c) => {
return c.res({/* ... */})
})
app.frame('/bar', (c) => {
return c.res({/* ... */})
})