繁体   English   中英

登录成功后将电子邮件保存到safari本地存储

[英]save email to safari local storage after login success

我正在尝试使用快速的safari服务开发safari扩展。 该项目是从mac os和safari扩展创建的。 我是javascript开发人员,但开发Safari扩展需要使用swift,但我对如何将数据保存到Safari本地存储一无所知。 我查看了以下文档,但无法从中受益

https://developer.apple.com/documentation/safariservices/safari_app_extensions

这是代码

import SafariServices


class SafariExtensionViewController: SFSafariExtensionViewController {


    @IBOutlet weak var passwordMessage: NSTextField!
    @IBOutlet weak var emailMessage: NSTextField!
    @IBOutlet weak var message: NSTextField!
    @IBOutlet weak var email: NSTextField!
    @IBOutlet weak var password: NSSecureTextField!
    static let shared = SafariExtensionViewController()
    override func viewDidLoad() {
        self.preferredContentSize = NSSize(width: 300, height: 250)
        message.stringValue = ""
        emailMessage.stringValue = ""
        passwordMessage.stringValue = ""
    }


    @IBAction func userLogin(_ sender: Any) {
        let providedEmailAddress = email.stringValue
        let providedPassword = password.stringValue
        let isEmailAddressValid = isValidEmailAddress(emailAddressString: providedEmailAddress)
        self.message.stringValue = ""
        emailMessage.stringValue = ""
        passwordMessage.stringValue = ""
        if isEmailAddressValid && providedPassword.count > 0 {
            let parameters = ["email": providedEmailAddress, "password": password.stringValue]
            let URI = URL(string: "https://api.production.navihq.com/auth/sign_in")
            let session = URLSession.shared
            var request = URLRequest(url: URI!)
            request.httpMethod = "POST"
            do {
                request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
            } catch let error {
                print(error.localizedDescription)
            }
            request.addValue("application/json", forHTTPHeaderField: "Content-Type")
            let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

                guard error == nil else {
                    return
                }

                guard let data = data else {
                    return
                }

                do {
                    //create json object from data
                    if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
                        if let httpResponse = response as? HTTPURLResponse { 
                            if (httpResponse.statusCode >= 200 && httpResponse.statusCode < 300) {
                                self.message.stringValue = "Login Successful"
                                // i want to store the email in safari local storage here
                            } else {
                                self.message.stringValue = "Invalid Credentials"
                            }
                        }
                    }
                } catch let error {
                    print(error.localizedDescription)
                }
            })
            task.resume()
        } else {
            emailMessage.textColor = NSColor.red
            emailMessage.stringValue = "Invalid Email"
        }
    }

}

不:我没有使用IOS。 我正在使用safariservices。

认为您应该在Safari应用程序扩展和注入的脚本之间使用消息传递功能 例如,将消息从注入的脚本发送到应用程序分机。 DOMContentLoaded触发并通过所需的数据(当前为电子邮件)发送对它的答案,以通过注入的JS设置到浏览器的本地存储中。

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM