투케이2K

55. (ios/swift) ios 및 자바스크립트 웹뷰 통신 (간략 정리) 본문

IOS

55. (ios/swift) ios 및 자바스크립트 웹뷰 통신 (간략 정리)

투케이2K 2021. 11. 25. 13:14
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

 

===============================
// [자바스크립트 >> iOS 함수 호출]
===============================

// [일반 함수 호출 : system]
window.webkit.messageHandlers.system.postMessage('');

                
// [데이터 전송 함수 호출 : system]
var str = "hello"
window.webkit.messageHandlers.system.postMessage(str);
                

// [json 전송 함수 호출 : system]
var jsonObj = {"idx":1, "name":"twok"};
window.webkit.messageHandlers.system.postMessage(JSON.stringify(jsonObj));



===============================
// [자바스크립트 iOS 에서 전달한 데이터 확인]
===============================

function setSystem(value) {
     <!-- 안드로이드에서 전달받음 -->
     if (android_agent > -1) {
          alert(value);
     }
     <!-- IOS에서 전달받음 -->
     else if (iphone > -1 || ipad > -1) {
         if (typeof value == "object") { // json 데이터 처리
             alert(JSON.stringify(value));
         }
         else { // string 데이터 처리
             alert(value);
         }
     }
}



===============================
// [iOS >> 자바스크립트 함수 호출]
===============================

// [json 전송 : 자바스크립트 에서는 object 형식으로 받는다]
// [딕셔너리 생성 >> JSONSerialization : json 데이터 생성]
self.main_webview!.evaluateJavaScript("setSystem(\(jsonObj))", completionHandler: nil)
        

// [string 전송]
var ok_data = "hello"
self.main_webview!.evaluateJavaScript("receive_Open('\(ok_data)')", completionHandler: nil)
        

// [일반 함수 호출]
var no_data = ""
self.main_webview!.evaluateJavaScript("receive_Open('\(no_data)')", completionHandler: nil)



===============================
// [iOS 자바스크립트에서 전달한 데이터 확인]
===============================

// [브릿지 경로 추가 : 데이터 받을 경로]
self.javascriptController.add(self, name: "system")


// [브릿지 : 자바스크립트에서 전달 받은 데이터 확인]
@available(iOS 8.0, *)
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {

    // [웹 코드] window.webkit.messageHandlers.system.postMessage('');
    if message.name == "system" {
         let receiveData = message.body as! String // 전달 받은 메시지 확인
    }

}

반응형
Comments