Fixed loading dkbm in webview

This commit is contained in:
Selim Mustafaev 2024-02-27 19:34:16 +03:00
parent 771b5923b6
commit 354d11bcc0
4 changed files with 51 additions and 50 deletions

View File

@ -1158,7 +1158,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 117;
CURRENT_PROJECT_VERSION = 121;
DEVELOPMENT_TEAM = 46DTTB8X4S;
INFOPLIST_FILE = AutoCat/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;
@ -1186,7 +1186,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 117;
CURRENT_PROJECT_VERSION = 121;
DEVELOPMENT_TEAM = 46DTTB8X4S;
INFOPLIST_FILE = AutoCat/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;

View File

@ -2,12 +2,13 @@ import UIKit
import WebKit
import PKHUD
class DkbmController: UIViewController, WKScriptMessageHandler {
class DkbmController: UIViewController, WKScriptMessageHandlerWithReply {
private var webView: WKWebView!
private var captchaAdded = false
var onDone: ((String) -> Void)?
var checkSource: OsagoCheckSource?
override func viewDidLoad() {
super.viewDidLoad()
@ -18,7 +19,9 @@ class DkbmController: UIViewController, WKScriptMessageHandler {
let contentController = WKUserContentController()
let script = WKUserScript(source: js!, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
contentController.addUserScript(script)
contentController.add(self, name: "dkbmHandler")
if #available(iOS 14.0, *) {
contentController.addScriptMessageHandler(self, contentWorld: .page, name: "dkbmHandler")
}
config.userContentController = contentController
}
@ -42,21 +45,21 @@ class DkbmController: UIViewController, WKScriptMessageHandler {
// MARK: - WKScriptMessageHandler
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
guard let msg = message.body as? [String:String] else { return }
print(msg)
func userContentController(_ userContentController: WKUserContentController,
didReceive message: WKScriptMessage,
replyHandler: @escaping (Any?, String?) -> Void) {
if let event = msg["event"] {
if event == "show-challenge" {
if self.captchaAdded {
HUD.hide()
self.webView.isHidden = false
guard let msg = message.body as? [String:String], let checkSource else { return }
if msg.contains(where: { $0.key == "loaded" }) {
switch checkSource {
case .plateNumber(let number):
replyHandler(["plateNumber": number], nil)
case .vin(let number):
replyHandler(["vin", number], nil)
}
} else if event == "show-checkbox" {
self.captchaAdded = true
}
} else if let token = msg["token"] {
self.onDone?(token)
} else if let urlString = msg["url"], let url = URL(string: urlString) {
}
}
}

View File

@ -42,26 +42,15 @@ class OsagoAddController: FormViewController {
form +++ Section()
<<< ButtonRow() { $0.title = NSLocalizedString("Check", comment: "verb") }.onCellSelection { _, _ in
// HUD.show(.progress)
// Api.checkOsago(number: "Н133РО161", vin: nil, date: Date(), token: "")
// .observeOn(MainScheduler.instance)
// .subscribe { vehicle in
// HUD.hide()
// self.onDone?(vehicle)
// } onError: { err in
// HUD.show(error: err)
// }
// .disposed(by: self.bag)
// return
let controller = DkbmController()
controller.onDone = { token in
self.navigationController?.popViewController(animated: true, completion: {
guard let source = (self.form.rowBy(tag: "SourcePicker") as? PickerInlineRow<OsagoCheckSource>)?.value,
let date = (self.form.rowBy(tag: "date") as? DateTimeInlineRow)?.value
else { return }
let controller = DkbmController()
controller.checkSource = source
controller.onDone = { token in
self.navigationController?.popViewController(animated: true, completion: {
var number, vin: String?
switch source {
case .plateNumber(let n):

View File

@ -1,28 +1,37 @@
const sitekey = '6Lf2uycUAAAAALo3u8D10FqNuSpUvUXlfP7BzHOk';
//const sitekey = '6Lf2uycUAAAAALo3u8D10FqNuSpUvUXlfP7BzHOk';
let verifyCallback = (response) => {
console.log('verifyCallback: ', response);
window.webkit.messageHandlers.dkbmHandler.postMessage({ token: response });
};
window.addEventListener('load', (event) => {
if(window.top == window.self) {
let meta = document.createElement('meta'); meta
meta.setAttribute( 'name', 'viewport' );
meta.setAttribute( 'content', 'width = device-width' );
document.getElementsByTagName('head')[0].appendChild(meta);
var timerId;
document.body.innerHTML = '';
window.webkit.messageHandlers.dkbmHandler.postMessage({ event: 'show-checkbox' });
grecaptcha.render(document.body, {
'sitekey' : sitekey,
'callback' : verifyCallback
});
} else {
let checkbox = document.getElementById('recaptcha-anchor');
if(checkbox) {
checkbox.click();
window.webkit.messageHandlers.dkbmHandler.postMessage({ event: 'show-challenge', location: location.href });
function getImages() {
let nodes = document.querySelectorAll(".policies-tbl img");
let urls = Array(...nodes).map(img => img.src);
if(urls.length > 1) {
window.webkit.messageHandlers.dkbmHandler.postMessage({ "url": urls[1] });
clearInterval(timerId);
}
}
timerId = setInterval(getImages, 1000);
window.addEventListener('load', async (event) => {
if(window.top == window.self) {
let { plateNumber, vin } = await window.webkit.messageHandlers.dkbmHandler.postMessage({ "loaded": "true" });
switchTab('tsBlock');
if(plateNumber) {
let licencePlateInput = document.getElementById('licensePlate');
licencePlateInput.value = plateNumber;
}
if(vin) {
let vinInput = document.getElementById('vin');
vinInput.value = vin;
}
}
});
})