【问题标题】:How i can send message to the Injected Script on page from SafariExtensionHandler我如何从 SafariExtensionHandler 向页面上的注入脚本发送消息
【发布时间】:2019-03-26 22:15:12
【问题描述】:

我可以使用from page prop 和dispatchMessageToScript 方法在override func messageReceived 中收到消息时发送消息,但我不明白如何在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        
    }     
}

【问题讨论】:

  • 不相关,但您在 SafariExtensionViewController.shared.popupChangeBackgorundColor() 中有错字(Backgund)
  • 哦,谢谢!想念它D;

标签: swift safari-app-extension


【解决方案1】:

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

【讨论】:

  • 感谢您的回答,对您有很大帮助。顺便说一句,您对如何在注入脚本中设置设置有任何想法吗?我在注入的脚本中运行 safari.extension.settings.setItem() 但它带有一个 TypeError: undefined in safari 控制台。
猜你喜欢
  • 2013-07-27
  • 2013-06-27
  • 2018-12-25
  • 2016-12-01
  • 1970-01-01
  • 2014-07-16
  • 2015-05-03
  • 2020-05-01
  • 1970-01-01
相关资源
最近更新 更多