Skip to content

WKWebView implementation using Swift's new Observation framework

License

Notifications You must be signed in to change notification settings

buzsh/ObservableWebView

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ObservableWebView

WKWebView implementation using Swift's Observation framework.

let manager: ObservableWebViewManager

Observable States

ObservableWebView(manager: manager)
  .onChange(of: manager.urlString) { ... }
ObservableWebView(manager: manager)
  .onChange(of: manager.progress) {
    updateLoadingBar(withProgress: manager.progress)
  }

Load States

ObservableWebView(manager: manager)
  .onChange(of: manager.loadState) {
    switch state {
      case .idle:
        print("WebView is idle.")
      case .isLoading:
        print("WebView is loading.")
      case .isFinished:
        print("WebView has finished loading.")
      case .error(let error):
        print("WebView encountered an error: \(error.localizedDescription)")
      }
  }

JavaScript-friendly

Script Message Handlers

ObservableWebView(manager: manager)
  .scriptMessageHandler("messageFromJS", manager: manager) { message in
    print("Message: \(message.body)")
  }

Execution

manager.js("document.title")

With completion:

manager.js("document.title") { result, error in
  if let error = error {
    print("JavaScript execution failed: \(error)")
  } else if let result = result {
    print("JavaScript execution result: \(result)")
  }
}

Screenshot 2024-04-06 at 12 24 31 PM

Tabs Gallery

Toolbar Customization

About

WKWebView implementation using Swift's new Observation framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages