2017-12-08 22 views
7

Đây là chức năng của tôi trong android:Làm thế nào để trở boolean để chức năng javascript từ nhanh chóng sử dụng wkwebview

@JavascriptInterface 
public boolean GetMobileVersion() { 

    return true; 
} 

này hàm được gọi trong JavaScript:

$(window).load(function() { 

    IsCallByMobileApp = false; 
    try { 
      IsCallByMobileApp = app.GetMobileVersion();/*Is call by android app*/ 

    } catch (e) { 
     IsCallByMobileApp = false; 
    } 

} 

Trong iOS Tôi đang cố gắng để đạt được cùng phương pháp tiếp cận sử dụng WKWebView như thế này nhưng không hoạt động:

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

Bất kỳ ai có thể tel l me Làm thế nào để gửi true đến chức năng Javascript? Vui lòng trả lời chi tiết cho tôi vì tôi mới sử dụng iOS và Swift.

Trả lời

1

Không chắc chắn nếu có WKWebView cũng giống như webview nhưng bạn có thể thử với thuần văn bản sau đây:

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 Tôi đã tạo ra một dự án GitHub cho việc này. https://github.com/BKRApps/WKWebView-JS. kiểm tra xem nó ra để biết thêm chi tiết.

Cập nhật 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() 

Thêm mã dưới đây để WKWebView Cấu hình:

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

Cập nhật các đại biểu 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; 
    } 
} 

để biết thêm thông tin: http://igomobile.de/2017/03/06/wkwebview-return-a-value-from-native-code-to-javascript/

+0

@jakir hussain, tôi đã cung cấp mã mẫu và dự án. Kiểm tra nó ra. –

+0

đọc câu hỏi của tôi GetMobileVersion() là cuộc gọi từ javascript và nếu gọi là thành công nó sẽ thiết lập IsCallByMobileApp là true –

+0

trong iOS, bạn không thể gọi trực tiếp một phương thức gốc từ JS, giống như nó tồn tại trong android. Vui lòng xem ứng dụng mẫu mà tôi đã tạo, ứng dụng sẽ đáp ứng nhu cầu của bạn. Hãy cho tôi biết nếu bạn gặp phải bất kỳ vấn đề nào. –

Các vấn đề liên quan