How to enable dark mode on safari by using safari extension?

29 views Asked by At

I am making an application for change theme colour of safari browser. I am using bellow code in safari extension but it did not work. Please check what is wrong in the bellow code

class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling {

var isDarkModeEnabled = false

func beginRequest(with context: NSExtensionContext) {
    let request = context.inputItems.first as? NSExtensionItem
    
   
    let message: Any? = request?.userInfo?[SFExtensionMessageKey]
    let profileUUID: UUID? = request?.userInfo?[SFExtensionProfileKey] as? UUID
    
   
    os_log(.default, "Received message from browser.runtime.sendNativeMessage: %@ (profile: %@)", String(describing: message), profileUUID?.uuidString ?? "none")
    
   
    let response = NSExtensionItem()
    isDarkModeEnabled.toggle()
    let cssStyles = isDarkModeEnabled ? """
        document.documentElement.setAttribute('data-theme', 'dark');
    """ : """
        document.documentElement.removeAttribute('data-theme');
    """
    self.dispatchMessageToScript(withName: "injectCSS", userInfo: ["css": cssStyles])
    context.completeRequest(returningItems: [response], completionHandler: nil)
}

func dispatchMessageToScript(withName messageName: String, userInfo: [String: Any]) {
    let message = ["name": messageName, "userInfo": userInfo] as [String : Any]
    let script = "window.postMessage(\(message), '*')"
    let jsScript = NSItemProvider(item: script as NSSecureCoding, typeIdentifier: kUTTypePlainText as String)
    NSExtensionItem().userInfo = ["script": jsScript]
}

}

0

There are 0 answers