slax-reader-web-bridge 是一个用于 Slax Reader 客户端应用集成的 Web 桥接库。它提供了 WebView 与 Native App 之间的通信机制,以及一系列用于操作和查询 Web 内容的功能。
- Native 通信: 提供统一的接口与 iOS 和 Android 原生层进行通信。
- 内容管理: 获取 Web 内容的高度,适配原生容器。
- 图片处理: 自动接管图片点击事件,通知原生层进行图片预览等操作。
- 元素高亮: 支持通过 ID 高亮指定的 DOM 元素。
- 滚动控制: 支持滚动到指定的锚点位置。
- 搜索功能: (内部功能) 支持在 DOM 树中查找匹配文本的元素。
slax-reader-web-bridge/
├── demo/ # 演示页面,用于测试各项功能
├── src/
│ ├── bridge/ # Native 通信核心逻辑
│ │ └── native-bridge.ts
│ ├── core/ # 核心桥接类
│ │ └── slax-webview-bridge.ts
│ ├── features/ # 具体功能实现
│ │ ├── content.ts # 内容高度计算
│ │ ├── highlight.ts # 元素高亮
│ │ ├── images.ts # 图片点击处理
│ │ ├── scroll.ts # 滚动控制
│ │ └── search.ts # 文本搜索
│ ├── types/ # 类型定义
│ ├── utils/ # 工具函数 (平台检测、Polyfill 等)
│ └── index.ts # 入口文件
├── tests/ # 单元测试
├── rollup.config.js # Rollup 打包配置
└── package.json
pnpm install-
启动开发模式 (监听文件变化):
pnpm dev
-
启动演示页面 (Demo):
pnpm demo
这将启动一个本地服务器,并在浏览器中打开演示页面,方便调试各项功能。
-
构建生产版本:
pnpm build
-
运行测试:
pnpm test
在 Web 页面中引入打包后的脚本,并实例化 SlaxWebViewBridge:
import { SlaxWebViewBridge } from 'slax-reader-web-bridge';
const bridge = new SlaxWebViewBridge();初始化时,Bridge 会自动:
- 应用必要的 Polyfills。
- 绑定图片点击事件监听器。
bridge.postMessage({
type: 'some-action',
payload: { /* data */ }
});- Android: 调用
window.NativeBridge.postMessage - iOS: 调用
window.webkit.messageHandlers.NativeBridge.postMessage
const height = bridge.getContentHeight();
console.log('Content Height:', height);// 滚动到 id 为 "section-1" 的元素
bridge.scrollToAnchor('section-1');// 高亮 id 为 "target-element" 的元素
bridge.highlightElement('target-element');为了确保 Bridge 正常工作,Native 端需要注入相应的 JavaScript 接口:
- Android: 需要在 WebView 中注入名为
NativeBridge的对象。 - iOS: 需要在
WKWebView的userContentController中注册名为NativeBridge的 ScriptMessageHandler。
MIT