Я успешно получил эффект темного режима для случайного HTML на html-странице веб-сайта, используя источник из этого замечательного учебника .
Я загрузил эти фотографии, чтобы лучше объяснить, что я получил.
Я пытаюсь получить то же самое в WKWebView.HTML загружается из API, поэтому я использую метод WKWebView.loadHTMLString.Для этого примера демонстрационный HTML сохраняется в файле в проекте Xcode.Также я добавил 2 файла javascript в Xcode: darkmode.min.js (это библиотека) и darkmode-options.js (позиция и текстовая метка для переключателя внизу страницы).Я думаю, что я не правильно вводить 2 сценария, используя WKUserScript.Очевидно, что darkmode.min.js должен быть загружен до darkmode-options.js.Вот почему я использовал WKUserScriptInjectionTime.atDocumentStart и WKUserScriptInjectionTime.atDocumentEnd.
Также, когда я печатаю в консоли источник представления HTML, он не показывает скрипты, которые были вставлены.
private func initWebView() {
let html = self.demoHTML
let jsLibrary = self.darkModeLibraryJS
let jsOptions = self.darkModeOptionsJS
let webConfiguration = WKWebViewConfiguration()
let contentController = WKUserContentController()
// Libray script an document start
let userScript = WKUserScript(source: jsLibrary, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)
contentController.addUserScript(userScript)
// Options script and document end
let optionsScript = WKUserScript(source: jsOptions, injectionTime: WKUserScriptInjectionTime.atDocumentEnd, forMainFrameOnly: false)
contentController.addUserScript(optionsScript)
webConfiguration.userContentController = contentController
self.webview = WKWebView(frame: CGRect.zero, configuration: webConfiguration)
self.webview?.navigationDelegate = self
self.view.addSubview(webview!)
self.webview!.loadHTMLString(html, baseURL: nil)
self.webview!.fillSuperview() // after view has been added as subview
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
self.chechHTML()
}
private func chechHTML() {
let script = "document.documentElement.outerHTML.toString()"
self.webview?.evaluateJavaScript(script, completionHandler: { (html, error) in
if html != nil {
print("❌: check html response", html ?? "")
}
if error != nil {
print("❌: check html with error", error ?? "")
}
})
}
Проект загружен на github: https://github.com/CristiGhn/darkmode-webview. Проект Xcode также содержит файл darkmode.html, который работает и показывает то же, что и на фотографиях выше.
Спасибо!