Как я могу отправить сообщение в Injected Script на странице из SafariExtensionHandler - PullRequest
0 голосов
/ 22 марта 2019

Я могу отправить сообщение при получении сообщения в 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        
    }     
}

1 Ответ

1 голос
/ 26 марта 2019

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)}}
}
...