Files
Netcatty/electron/hostBrowser/browserPreload.cjs
T
陈大猫andCodex b6bff4df6b feat(browser): browse host services from terminal side panels (#3701)
* Codex worktree snapshot: startup-cleanup

Co-authored-by: Codex

* fix(browser): close malformed proxy connections without a reply

* feat(browser): embed host browsing in terminal side panels

* style(browser): blend compact browser chrome into terminal panels

* feat(browser): open terminal links internally with a system browser preference

* fix(browser): retain the first terminal link during panel mount replay

* fix(browser): release contexts when their split pane closes

* style(browser): remove the downloads panel shadow

* fix(browser): ignore late downloads after panel closure

* fix(browser): mount browser content on terminal auto-open

* fix(browser): preserve empty-vault recovery with bookmarks

* fix(browser): expose actions for supported terminal types

* fix(browser): retain open requests before the panel mounts

* fix(browser): align vault actions with supported hosts

* fix(browser): share download controls across host contexts

* fix(browser): keep vault browser requests on visible sessions

* fix(browser): release contexts after workspace detach

* fix(browser): enforce WebRTC routing on page contents

* fix(browser): skip unsupported sessions in open requests

* style(browser): encode glyphs in ASCII-safe source
2026-10-17 02:26:36 +08:00

38 lines
1.9 KiB
JavaScript

"use strict";
const { contextBridge, ipcRenderer } = require("electron");
contextBridge.exposeInMainWorld("hostBrowser", Object.freeze({
snapshot: () => ipcRenderer.invoke("netcatty:host-browser:snapshot"),
command: (command) => ipcRenderer.invoke("netcatty:host-browser:command", command),
listBookmarks: () => ipcRenderer.invoke("netcatty:host-browser:bookmarks:list"),
saveBookmark: (bookmark) => ipcRenderer.invoke("netcatty:host-browser:bookmarks:upsert", bookmark),
removeBookmark: (id) => ipcRenderer.invoke("netcatty:host-browser:bookmarks:remove", id),
listDownloads: () => ipcRenderer.invoke("netcatty:host-browser:downloads:list"),
onDownloadsChanged: (callback) => {
const listener = (_event, downloads) => callback(downloads);
ipcRenderer.on("netcatty:host-browser:downloads-changed", listener);
return () => ipcRenderer.removeListener("netcatty:host-browser:downloads-changed", listener);
},
onBookmarksChanged: (callback) => {
const listener = () => callback();
ipcRenderer.on("netcatty:host-browser:bookmarks-changed", listener);
return () => ipcRenderer.removeListener("netcatty:host-browser:bookmarks-changed", listener);
},
onSiteIconsChanged: (callback) => {
const listener = () => callback();
ipcRenderer.on("netcatty:host-browser:site-icons-changed", listener);
return () => ipcRenderer.removeListener("netcatty:host-browser:site-icons-changed", listener);
},
onShortcut: (callback) => {
const listener = (_event, shortcut) => callback(shortcut);
ipcRenderer.on("netcatty:host-browser:shortcut", listener);
return () => ipcRenderer.removeListener("netcatty:host-browser:shortcut", listener);
},
onState: (callback) => {
const listener = (_event, state) => callback(state);
ipcRenderer.on("netcatty:host-browser:state", listener);
return () => ipcRenderer.removeListener("netcatty:host-browser:state", listener);
},
}));