Files
bible-app/BROWSER_TAB.md
T
christianandClaude Opus 5.5 8ddbee199b Release 1.4.39
Browser tab: the keyboard opens right under the search box, and Enter
searches and puts it away.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:20:34 -04:00

5.1 KiB
Raw Permalink Blame History

Browser tab

One web page, full screen in the tab: no address bar, bookmarks or scrollbars — just the page, in the same area the Graphics tab uses. It loads when the app starts and keeps running while other tabs are showing, so it is ready the moment it is opened. Built for It Is Written (https://it-is-written-waters-church.vercel.app/), but any web page works.

On the stage

Do this What happens
Drag a finger The page scrolls.
Tap a text box on the page The app's own keyboard (the Prayer tab's) comes up right under the box (above it if the box is near the bottom of the screen — the stage TV is portrait) and types into it. Enter submits and puts the keyboard away; it also goes away when the page moves on. × closes it; tap the box again to bring it back.
Tap a scripture reference (e.g. "Isaiah 41:10") It opens in a new Bible tab, at that verse, in the translation printed beside it (NIV, ESV…) when that translation is switched on.
Tap anything else Works on the page as normal.
Leave the tab and come back The page is exactly as it was: same search, same place, same typing.

Pen, highlighter, laser and spotlight are off on this tab (the page takes every touch — that is how it scrolls and is typed into), as on Graphics and Maps. Touches on the page keep the idle splash away, and five fingers still blank the screen.

If the page gets stuck or a tap wanders off the site: the ⟳ refresh button puts it back on its start page (along with the rest of the app), or use Companion / the admin console below.

Settings › Browser Tab

  • Start page — the page the tab opens. Blank = It Is Written. Changing it takes the tab there.
  • Page size — Auto lays the page out like a tablet and scales it to fill the width (about 200% on the portrait TV). Pick a percentage if a site looks too small or too big.
  • Tap a scripture reference… — on by default.
  • Return to the start page — the tab remembers where it was while the app runs (so a trip to Settings does not lose a search); this clears that.

All three settings travel with Service Profiles, so each service type can have its own start page. The tab can be hidden in Tab Visibility like any other, and more can be opened from the + menu.

From Companion, the phone and the admin console

OSC /bibleapp/browser Show the Browser tab
OSC /bibleapp/browser/reload Reload the page
OSC /bibleapp/browser/home Back to the start page
Feedback /bibleapp/feedback/state/tab_kind/browser 1 while it is showing
Information line 4/10 Browser | hope | LIVE — the page's search term (or title)

The phone remote shows the page in its TV view: tap to press things on it, drag (one finger or two) to scroll, and the page buttons move it a screen at a time. The admin console can show the tab, reload it, send it home, and change the start page and page size.

The follower screen shows the same page, clean, and follows its scroll, typing and anything opened on it. It is fed the stage's copy of the page rather than loading the site itself — loading it would re-run the search and could put different results on the program feed.

How it works

  • Stage: each Browser tab is an Electron <webview> — Chrome's engine in its own sandboxed process and its own session (persist:browser-tab, so a site's settings and sign-ins survive restarts). main.cjs forces its settings: no Node, sandboxed, only http(s), no new windows (links that would open one open in place), no permission prompts, no downloads, no pinch-zoom, no dialog boxes, and "Leave site?" can never block Reload or Start page.
  • The pages live in their own layer (#browserTabHost) inside .tab-content. Every tab switch rebuilds .tab-content, and moving or recreating a webview reloads its page, so app.js clears around that layer (clearTabContentKeepingBrowser) and switching tabs only shows or hides it.
  • browser-guest-preload.cjs runs inside the page (invisible to the site) and reports what the app cannot see from outside: a tapped text field, a tapped reference (found with the app's own scripture-scan.js — the same rules ProPresenter Sync uses), scroll, activity, five fingers, and — only while a follower is linked — a script-free copy of the page's DOM.
  • browser-tab.js owns the tab: the pages, the keyboard (via createPrayerKeyboard with a "sink"), scripture taps, scrolling for the phone / OSC / admin, and the follower's copy. On the follower it shows that copy in sandboxed frames (no scripts); in a plain browser (admin offstage copy, npm start) it shows the live page in an iframe — keyboard and scripture taps need the stage.

Limits worth knowing

  • The follower's copy is the page's DOM, not video: anything drawn by script into a <canvas>, and script-driven animation, will not move there. Whatever computer shows the follower screen needs to reach the site's fonts and images over the internet, as the stage does.
  • In a plain browser (admin offstage copy) some sites refuse to be shown inside another page.