如何将消息发送到SafariextensionHandler页面上的注入脚本



我可以在override func messageReceived中使用from page Prop和 dispatchMessageToScript方法发送消息时发送消息,但是我不明白我该如何在injectOpenWelcomeTab方法中执行此操作。谢谢

import SafariServices
class SafariExtensionHandler: SFSafariExtensionHandler {
    override func messageReceived(withName messageName: String, from page: SFSafariPage, userInfo: [String : Any]?) {
        // This method will be called when a content script provided by your extension calls safari.extension.dispatchMessage("message").
        page.getPropertiesWithCompletionHandler { properties in
            NSLog("The extension received a message ((messageName)) from a script injected into ((String(describing: properties?.url))) with userInfo ((userInfo ?? [:]))")
            //Вот таким образом можем дёргать методы из контроллера
            SafariExtensionViewController.shared.popupChangeBackgorundColor()           
        }
        page.dispatchMessageToScript(withName: "openWelcomePage")
    }
    public func injectOpenWelcomeTab(){           
        //Here I want send message to injected script        
    }     
}

sfsafariapplication.getactivewindow是您最好的朋友。只需确保您import SafariServices

func injectOpenWelcomeTab() {
    getActivePage {
        $0?.dispatchMessageToScript(withName: "openWelcomePage", userInfo: ["foo": bar as Any])
    }
}
func getActivePage(completionHandler: @escaping (SFSafariPage?) -> Void) {
    SFSafariApplication.getActiveWindow {$0?.getActiveTab {$0?.getActivePage(completionHandler: completionHandler)}}
}

最新更新