WKUserContentController não é chamado quando o Javascript chama manipulador

votos
0

Estou desenvolvendo IOS App usando Webkit, Swift. E eu quero próximo controlador de exibição que mostra webkit quando minha lógica webview é feito. Usando WKUserContentController, implementei a lógica.

Mas não deu certo.

Abaixo está o meu código.

Esta é Swift.

import UIKit
import WebKit

class SelfAuthVC: UIViewController, WKNavigationDelegate, WKUIDelegate, WKScriptMessageHandler  {

private var webView: WKWebView!
let contentController = WKUserContentController()
let config = WKWebViewConfiguration()

override func viewWillAppear(_ animated: Bool) {

    contentController.add(self as WKScriptMessageHandler, name: callbackHandler)

    config.userContentController = contentController


    let preferences = WKPreferences()
    preferences.javaScriptEnabled = true

    config.preferences = preferences
    webView = WKWebView(frame: view.bounds, configuration: config)
    view.addSubview(webView)

    let url = Bundle.main.url(forResource: auth, withExtension: html)!
    webView.loadFileURL(url, allowingReadAccessTo: url)
    let request = URLRequest(url: url)

    webView.load(request)
    webView.navigationDelegate = self
    webView.uiDelegate = self

}
override func viewDidLoad() {
    super.viewDidLoad()

}

func webViewDidClose(_ webView: WKWebView) {
    self.navigationController?.popViewController(animated: true)
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

    webView.evaluateJavaScript(var my_email = '\(UserInfo.shared().email!)')  { (result, error) in
        guard error == nil else {
            print(error)
            return
        }
    }

}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print(didReceive message here)
    if(message.name == callbackHandler){
        print(callbackHandler: \(message.body))
        self.dismiss(animated: true, completion: nil)
        self.navigationController?.popViewController(animated: true)

    }
}

}

Abaixo está JS

<body>
<script language=JavaScript>

IMP.certification({


    min_age: 18
}, function(rsp) {
    if ( rsp.success ) {

        $.ajax({
                method : POST,
                url : https://******/user/iamport,
                dataType : 'json',
                data : {
                    imp_uid : rsp.imp_uid,
                    user_email: my_email
                }
         }).done(function(rsp) {
                // 이후 Business Logic 처리하시면 됩니다.

                 (function finish(){
                  window.webkit.messageHandlers.callbackHandler.postMessage(trigger from JS);


                  try {
                  webkit.messageHandlers.callbackHandler.postMessage(
                                                                     'done'
                                                                     );
                  } catch(err) {
                  console.log('The native context does not exist yet');
                  }
                  }())

         });

    } else {
         // Auth failed
        var msg = '인증에 실패하였습니다. 관리자에게 문의하세요';
        msg += '에러내용 : ' + rsp.error_msg;

        alert(msg);
    }
});
</script>
</body>

Acho que escrevi códigos que é necessário. Mas após o processo de autorização, ViewContoller não desaparecem. Que mudanças são necessárias para resolver este problema?

Publicado 20/10/2018 em 14:11
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

I esqueceu de acrescentar este códigos.

config.userContentController = contentController
contentController.add(self, name: "authAction")
Respondeu 21/11/2018 em 03:06
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more