2017-12-08 91 views
7

kullanarak Swift javascript işlevine boole dönmek için yaklaşım böyle WKWebView kullanarak ama işe yaramıyor:nasıl Bu android benim işlevidir wkwebview

func userContentController(_ userContentController: WKUserContentController, 
    didReceive message: WKScriptMessage) { 

    if(message.name == callbackhandler) { 

     webView.evaluateJavaScript("GetMobileVersion();") { (true, error) in 
      guard error == nil else { 
       print("there was an error") 
       return 
      } 

      print(Bool(true)) 
     } 
    } 
} 

Can kimse tel Ben nasıl Javascript işlevine true göndermek için? Lütfen bana iOS ve Swift için yeni olduğum için ayrıntılı olarak cevap verin.

cevap

1

emin değil WKWebView ile eğer Web görünümündeki aynıdır ancak aşağıdaki şekilde düz metin ile deneyebilirsiniz:

func userContentController(_ userContentController: WKUserContentController, 
didReceive message: WKScriptMessage) { 

if(message.name == callbackhandler) { 

    webView.evaluateJavaScript("GetMobileVersion(true);") { (true, error) in 
     guard error == nil else { 
      print("there was an error") 
      return 
     } 

     print(Bool(true)) 
    } 
} 

}

1

enter image description here Bunun için bir GitHub projesini oluşturduk. https://github.com/BKRApps/WKWebView-JS. Daha fazla bilgi için kontrol edin.

Güncelleme JavaScript:

function getMobileVersion(){ 
     webkit.messageHandlers.VersionHandler.postMessage({}) 
    } 

function receivedMobileVersion(mobileVersion){ 
     //here you will be getting the mobile version. Then execute the logic. 
     // i have added this only to cross check the version. you don't need to add this. 

     if(mobileVersion === true) { 
     webkit.messageHandlers.VerifyHandler.postMessage({version:mobileVersion}) 
    } 
} 

getMobileVersion() 

WKWebView Yapılandırma için aşağıdaki kodu ekleyin:

configuration.userContentController.add(self, name: "VersionHandler") 
// i have added this only to cross check the version. you don't need to add this. 
configuration.userContentController.add(self, name: "VerifyHandler") 

Güncelleme WKScriptMessageHandler temsilci:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { 
    switch message.name { 
    case "VersionHandler": 
     let mobileVersion = true //write the version logic and send the true or false. 
     let sendMobileVersionScript = "receivedMobileVersion(\(mobileVersion))" 
     self.wkWebView?.evaluateJavaScript("\(sendMobileVersionScript)", completionHandler: { (any, error) in 
          print("hello") 
     }) 
    case "VerifyHandler": 
     print(message.body) // i have added this only to cross check the version. you 
    default: 
     break; 
    } 
} 

daha fazla bilgi için: http://igomobile.de/2017/03/06/wkwebview-return-a-value-from-native-code-to-javascript/

+0

@jakir hussain, Örnek kod ve projeyi sağladım. Buna bir bak. –

+0

sorumu yanıtım GetMobileVersion() javascript'ten bir çağrıdır ve arama başarılıysa, iOS'taki true –

+0

olarak IsCallByMobileApp değerini ayarlayacaktır, Android'de olduğu gibi JS'den doğrudan yerel bir yöntemi arayamazsınız. Lütfen oluşturduğum örnek uygulamaya bakın, ihtiyaçlarınızı karşılayacaktır. Herhangi bir sorunla karşılaşırsanız bana bildirin. –