2017-12-08 23 views
7

का उपयोग कर यह एंड्रॉयड में अपने कार्य है तेजी से जावास्क्रिप्ट समारोह के लिए बूलियन वापस जाने के लिए दृष्टिकोण WKWebView इस तरह का उपयोग कर, लेकिन यह काम नहीं कर रहा:कैसे 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)) 
     } 
    } 
} 

किसी को भी टेलीफोन कर सकते हैं मैं जावास्क्रिप्ट समारोह में true कैसे भेजूं? कृपया मुझे विस्तार से जवाब दें क्योंकि मैं आईओएस और स्विफ्ट के लिए नया हूं।

उत्तर

1

WKWebView साथ करता है, तो सुनिश्चित नहीं हैं कि वेब दृश्य के रूप में ही है, लेकिन आप निम्नलिखित के रूप में प्लेन टेक्स्ट के साथ की कोशिश कर सकते:

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 मैं इस के लिए एक GitHub प्रोजेक्ट बनाया हुआ है। https://github.com/BKRApps/WKWebView-JS। अधिक जानकारी के लिए इसे देखें।

अद्यतन जावास्क्रिप्ट:

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 विन्यास के लिए नीचे दिए कोड जोड़ें:

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") 

अद्यतन WKScriptMessageHandler प्रतिनिधि:

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; 
    } 
} 
अधिक जानकारी के लिए

: http://igomobile.de/2017/03/06/wkwebview-return-a-value-from-native-code-to-javascript/

+0

@jakir हुसैन, मैंने नमूना कोड और प्रोजेक्ट प्रदान किया है। इसकी जांच - पड़ताल करें। –

+0

मेरा प्रश्न पढ़ें GetMobileVersion() जावास्क्रिप्ट से कॉल है और यदि कॉलिंग सफलता है तो यह आईएसओ में IsCallByMobileApp को –

+0

के रूप में सही करेगा, आप सीधे जेएस से मूल विधि को कॉल नहीं कर सकते, जैसे यह एंड्रॉइड में मौजूद है। कृपया मैंने बनाया नमूना ऐप देखें, यह आपकी आवश्यकताओं को पूरा करेगा। अगर आपको किसी भी मुद्दे का सामना करना पड़ता है तो मुझे बताएं। –

संबंधित मुद्दे