Я пытаюсь зайти на сайт с помощью приложения. В проекте есть два контроллера представления: один с пользовательским интерфейсом входа, который я сделал, а другой с WKWebView. По сути, я хочу взять введенные пользователем параметры и отправить их в WKWebView, войти в систему и вернуть данные, которые будут представлены на другом контроллере представления.
Примечание. Я уже пытался найти API, но на этом веб-сайте нет ни одного доступного
Вот как я сейчас это делаю, но я сталкиваюсь с принудительным развертыванием возвращенной ошибки Nill.
Просмотр контроллера с WebView
import UIKit
import WebKit
class Web_View: UIViewController, WKUIDelegate {
var webView: WKWebView!
var viewControllerManager : ViewController!
override func viewDidLoad() {
super.viewDidLoad()
let HAC_URL = URL(string:"https://hac.friscoisd.org/HomeAccess/Account/LogOn?ReturnUrl=%2fhomeaccess%2f")
let request = URLRequest(url: HAC_URL!)
webView.load(request)
}
//loadsBackgroundView
override func loadView() {
let webConfig = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfig)
webView.uiDelegate = self
view = webView
}
//Username manager
func webViewDidFinishLoadUsername() {
webView.evaluateJavaScript("document.getElementByTagName(\"input\")[2].value = \(viewControllerManager.username)") {(result, error) in
if error != nil
{
print(result!)
}
else
{
print(error!)
}
}
}
//Password manager
func webViewDidFinishLoadPassword() {
webView.evaluateJavaScript("document.getElementByTagName(\"input\")[1].value = \(viewControllerManager.password)") {(result, error) in
if error != nil
{
print(result!)
}
else
{
print(error!)
}
}
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}
Контроллер пользовательского интерфейса входа в систему
import UIKit
import WebKit
class ViewController: UIViewController{
//Outlets and variables
let webViewControllerObject = Web_View()
var username : String = ""
var password : String = ""
@IBOutlet weak var errorLabel: UILabel!
@IBOutlet weak var usernameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
//Allows user to "touch off" the keyboard
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
//Gathers data and holds in two varables, sends username params
@IBAction func loginRequest(_ sender: Any) {
username = usernameTextField.text!
password = passwordTextField.text!
if (username.isEmpty || password.isEmpty)
{
errorLabel.text = "Please enter a valid login"
}
else if (!(username.isEmpty || password.isEmpty))
{
webViewControllerObject.webViewDidFinishLoadUsername()
webViewControllerObject.webViewDidFinishLoadPassword()
}
else
{
print("rough")
}
}
}
Если есть лучший способ сделать это, пожалуйста, сообщите мне
Редактировать
Это линия, я думаю, нуждается в исправлении
var webView: WKWebView!
var viewControllerManager: ViewController!
Ошибка появляется в этой строке
webView.evaluateJavaScript ("document.getElementByTagName (\" input \ ") [2] .value = (viewControllerManager.username)") {(результат, ошибка) в
У меня есть догадка, потому что я снова распаковываю силой