Swift 如何从SafariExtensionHandler向页面上的注入脚本发送消息

Swift 如何从SafariExtensionHandler向页面上的注入脚本发送消息,swift,safari-app-extension,Swift,Safari App Extension,我可以在override func messageReceived中使用from pageprop和dispatchMessageToScript方法接收消息时发送消息,但我不明白如何在injectOpenWelcomeTab方法中执行此操作。谢谢 import SafariServices class SafariExtensionHandler: SFSafariExtensionHandler { override func messageReceived(withName m

我可以在
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        
    }     
}

SFSAvariaApplication.getActiveWindow是您在这里最好的朋友。 只需确保
导入safarises服务

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

SFSAvariaApplication.getActiveWindow是您在这里最好的朋友。 只需确保
导入safarises服务

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

不相关,但您在
SafariExtensionViewController.shared.popupChangeBackgorundColor()中有输入错误(Backgorund)
噢,谢谢!错过它;不相关,但您在
SafariExtensionViewController.shared.popupChangeBackgorundColor()中有输入错误(Backgorund)
噢,谢谢!错过它;谢谢你的回答,这很有帮助。顺便问一下,你知道如何在注入的脚本中设置设置吗?我在注入的脚本中运行了safari.extension.settings.setItem(),但它附带了一个TypeError:在safari控制台中未定义。感谢您的回答,这非常有帮助。顺便问一下,你知道如何在注入的脚本中设置设置吗?我在注入的脚本中运行了safari.extension.settings.setItem(),但它附带了一个TypeError:在safari控制台中未定义。