- 给全部 78 个 Swift 源文件添加详细的中文注释(文件级、类级、方法级) - 删除 LegacyRDReaderController/ 死代码目录(16 文件 4592 行) - 根目录翻页容器文件移入 ReaderView/ 目录 - Resources/ 移入 EPUBCore/Resources/(与使用者归属一致) - RDEPUBTextIndexTable.swift 移入 EPUBTextRendering/(消除反向依赖) - RDURLReaderController.swift 移入 EPUBUI/(入口控制器归入 UI 层) - 更新 podspec 资源路径
38 lines
1.2 KiB
Swift
38 lines
1.2 KiB
Swift
// RDEPUBWebView+Search.swift
|
||
// RDEPUBWebView 的搜索高亮扩展
|
||
// 从当前渲染请求中提取搜索展示信息,生成搜索高亮脚本并注入到 WebView 中执行。
|
||
|
||
import WebKit
|
||
|
||
extension RDEPUBWebView {
|
||
/// 如果当前渲染请求包含搜索信息,注入搜索高亮脚本到 WebView
|
||
func applySearchDecorationsIfNeeded(completion: (() -> Void)? = nil) {
|
||
guard let webView else {
|
||
completion?()
|
||
return
|
||
}
|
||
|
||
let presentation: RDEPUBSearchPresentation?
|
||
switch currentRenderRequest {
|
||
case .reflowable(let request):
|
||
presentation = request.searchPresentation
|
||
case .fixed(let request):
|
||
presentation = request.searchPresentation
|
||
case .none:
|
||
presentation = nil
|
||
}
|
||
|
||
let script = RDEPUBJavaScriptBridge.applySearchScript(for: presentation)
|
||
webView.evaluateJavaScript(script) { [weak self] _, error in
|
||
guard let self else {
|
||
completion?()
|
||
return
|
||
}
|
||
if let error {
|
||
self.delegate?.epubWebView(self, didLogJavaScriptError: error.localizedDescription)
|
||
}
|
||
completion?()
|
||
}
|
||
}
|
||
}
|