简体   繁体   English

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

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

I am trying to develop safari extension using swift safari services. 我正在尝试使用快速的safari服务开发safari扩展。 The project is created from mac os and then safari extension. 该项目是从mac os和safari扩展创建的。 I am javascript developer but developing safari extension needed to use swift but I do not have any idea on how to save data in safari local storage. 我是javascript开发人员,但开发Safari扩展需要使用swift,但我对如何将数据保存到Safari本地存储一无所知。 I looked at the following documentation but could not benefit from it 我查看了以下文档,但无法从中受益

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

here is the code 这是代码

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

}

Not: I am not using IOS. 不:我没有使用IOS。 I am using safariservices. 我正在使用safariservices。

Think you should use Messaging capability between Safari app extension and injected script. 认为您应该在Safari应用程序扩展和注入的脚本之间使用消息传递功能 For example, send message from injected script to app ext. 例如,将消息从注入的脚本发送到应用程序分机。 when DOMContentLoaded triggered and send the answer to it with needed data (currently email) to set into local storage of the browser by injected JS. DOMContentLoaded触发并通过所需的数据(当前为电子邮件)发送对它的答案,以通过注入的JS设置到浏览器的本地存储中。

Hope it helps! 希望能帮助到你!

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

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