embed_url,它會在第三方 iframe 中渲染完整的 Theo 品牌瀏覽器外殼(地址欄、實時狀態指示器、自動重連界面)。無需 SDK 接線,無需手動處理 CDP —— 只要把 <iframe> 指向該 URL 即可上線。
快速開始
- 在你的後端創建會話(切勿將
THEO_API_KEY暴露給瀏覽器):
- 將該 URL 放入前端的 iframe 中:
- 首次渲染時獲取正確的實時視圖 URL(不會出現
about:blank閃屏) - 監聽
browserbase-disconnected的 postMessage 消息 - 在 CDP 目標發生變化時自動重新獲取併為 iframe 重新賦 key
- 斷開連接時以 10 秒為間隔緊密輪詢,連接正常時放寬為 30 秒
- 帶有 Theo 品牌的地址欄 + 實時狀態指示器 + 重連遮罩層
令牌的工作原理
embed_url 是一個簽名、短時效的 URL,綁定到 (sessionId, userId):
- 格式:
{APP_ORIGIN}/embed/browser/{sessionId}?token=<hmac> - 作用範圍: 該令牌與特定會話以及創建該會話的用戶綁定
- 有效期: 60 分鐘(Theo Browser 會話硬性上限為 20 分鐘,因此這為
keep_alive會話留出了餘量) - 密鑰: 由服務器端使用
BROWSER_EMBED_TOKEN_SECRET簽名,永不暴露給客戶端 - 輪換: 每次調用
GET /api/v1/browser/sessions/:id都會生成一個新令牌,因此長時間運行的儀表盤可以按需刷新 iframe
斷線處理
嵌入頁面已經實現了完整的恢復協議,但如果你要構建自定義的 iframe 包裝層,以下是確切的約定:live_view_version 計數器 —— iframe 會在版本號變化時重新賦 key,而不是在 URL 相等性變化時,因為 BrowserBase 可能返回相同的 URL 字符串,卻在背後悄悄更換了底層的 CDP 頁面目標。
安全姿態
- Iframe 沙箱:
allow-scripts allow-same-origin是保持 DevTools 前端與 CDP WebSocket 存活所需的最小權限集合。添加allow-forms/allow-popups沒有任何功能上的好處,反而可能觸發意外的導航,把 iframe 帶離實時視圖。 frame-ancestors *: 嵌入頁面設置了Content-Security-Policy: frame-ancestors *,因此任何來源都可以將其加載到 iframe 中。如果你想限制哪些來源可以加載該嵌入頁面,請在你自己的 CDN 層終止該 iframe 請求並應用你自己的響應頭。- iframe 中不含任何憑據: 嵌入頁面永遠不會接觸到你的 API 密鑰。它通過一個使用令牌鑑權的配套路由
/embed/browser/:id/live進行通信。
結束會話
當用戶關閉 iframe 時,務必從你的後端結束該會話,否則你將按剩餘的時鐘時間被計費:相關內容
- Browser Sessions API —— 完整的
/api/v1/browser/sessions接口 - Theo Browser SDK —— 適用於 Node/Deno/edge 的類型化輔助工具
