[英]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.