// 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?() } } }