Skip to content

Browser Background

适用于浏览器扩展的 Background Script(Service Worker)。

数据流

Content Script                   Background Script              Duty Logs Server
─────────────                   ─────────────────              ────────────────
logger.info('...')

  ├──chrome.runtime.sendMessage──▶  onMessage listener

                                    ├──▶ logger.info('...')

                                    └──fetch──▶ POST /api/log/batch
                                                (X-API-Key header)

Background Script 负责:

  1. 自身的日志记录(直接通过 HTTP 发送)
  2. 接收 Content Script 转发的日志(通过 registerContentBridge

导入

ts
import { createLogger, registerContentBridge } from '@duty/logs-sdk/browser-background';

初始化

ts
// 1. 创建 logger
const logger = createLogger({
  appId: 'my-extension',
  appName: 'My Browser Extension',
  version: '1.0.0',
  apiKey: 'your-api-key',
});

// 2. 注册 Content Script 桥接
const removeBridge = registerContentBridge(logger);

registerContentBridge 会注册 chrome.runtime.onMessage 监听器,自动接收 Content Script 发来的日志并转发。

Background 自身的日志

ts
// Background Script 自己的日志
logger.info('扩展已启动');
logger.error('后台任务失败', { task: 'sync', error: 'network timeout' });

清理

当扩展卸载或需要清理时:

ts
// 移除 Content Script 桥接监听器
removeBridge();

// 销毁 logger
logger.destroy();

完整示例

ts
// background.ts
import { createLogger, registerContentBridge } from '@duty/logs-sdk/browser-background';

const logger = createLogger({
  appId: 'duty-helper',
  appName: 'Duty Helper Extension',
  version: chrome.runtime.getManifest().version,
  apiKey: 'your-api-key',
});

const removeBridge = registerContentBridge(logger);

logger.info('Extension background started');

// 监听扩展安装事件
chrome.runtime.onInstalled.addListener((details) => {
  logger.info('Extension installed', { reason: details.reason });
});