首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从SafariExtensionHandler向页面上的注入脚本发送消息

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

Stack Overflow用户
提问于 2019-03-22 18:34:11
回答 1查看 355关注 0票数 0

我可以通过from page prop和dispatchMessageToScript方法在override func messageReceived中发送消息,但是我不知道如何在injectOpenWelcomeTab方法中实现。谢谢

代码语言:javascript
复制
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        
    }     
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-26 22:15:12

SFSafariApplication.getActiveWindow是你在这里最好的朋友。只要确保你的import SafariServices

代码语言:javascript
复制
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)}}
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55297718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档