반응형
웹에서 보내는 javascript를 캐치하려면 미리 등록을 해야한다.
이때 javascript를 보낼때 message에 javascript를 보내고 body값을 함께 NSDictionary (JSON) 형태로 보내주면 그걸 파싱해서 받을 수 있다.
// MARK: - WKScriptMessageHandler
extension MainViewController: WKScriptMessageHandler {
/// message name: javascript 명
/// 이렇게 사용하려면 javascript 명을 미리 등록을 해야한다.
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print("get message at main vc \\(message.name)")
if message.name == Configs.MessageName.AppWebPopupOpen {
print("MAIN:: Sub Web View PopUp OPEN")
if let dict = message.body as? NSDictionary {
print("\\(dict)")
if let moveUrlStr = dict["url"] as? String, let moveUrl = URL(string: moveUrlStr) {
print("moveUrl:: \\(moveUrl)")
JS등록과정
MainVC에서 웹뷰를 init 하는 부분을 살펴보면
- config라는 WKWebViewConfiguration를 새성하고
- contentController라는 WKUserContentController를 생성해
- contentController 여기에 LeakAvoider———— 뒤에 해당하는 javascript를 등록시켜준다.
→ LeakAvoider는 순환참조를 방지하기 위해 사용하는 오픈소스 이다.
4. 그리고 config.userContentController에 contentController 를 등록한다.
extension MainViewController {
public func initWebView() {
let config = WKWebViewConfiguration.init()
let contentController = WKUserContentController()
//js -> native
///leakAvoider를 사용하는 이유 약한 참조로 전환
contentController.add(LeakAvoider(delegate: self), name: Configs.MessageName.AppWebPopupOpen)
config.userContentController = contentController
다음에 조금더 다듬어서 올릴게요!!
반응형
'모바일앱 > iOS' 카테고리의 다른 글
오토레이아웃 뽀개기 (0) | 2022.05.14 |
---|---|
iOS 키보드 타입을 더이상 찾아해매지말자. (0) | 2022.04.28 |
롱프레스 및 햅틱진동 구현하기 (0) | 2022.04.26 |
ios 소켓통신에 대하여 (0) | 2022.04.20 |
WKWebView 기본메서드 와 Delegate메서드 [WKUIDelegate,WKUIDelegate] (0) | 2022.04.14 |
MyWebBrowser프로젝트를 통한 웹뷰 뜯어먹기 (0) | 2022.04.08 |
얼럿 addAction 한번에 추가하기 (0) | 2022.04.04 |
네비게이션 컨트롤러 NavigationController 사용하기 (0) | 2022.03.26 |