Gumi
접속 : 4611   Lv. 53

Category

Profile

Counter

  • 오늘 : 10 명
  • 전체 : 24436 명
  • Mypi Ver. 0.3.1 β
[모바일] IOS 웹뷰 window.-open / close 처리 (2) 2015/05/13 PM 05:18
모바일 웹에서는 기본적으로 새창열기를 안쓴다.
그런데 사용자인증 부분에서 인증기관 페이지로 이동 후 데이터를 받아오는 부분을
일반 웹에서 제공하는 것과 동일하게 팝업으로 자식창을 생성, 처리 후
부모창으로 돌아가는 방식을 쓴다.
(인증기관에서 앱을 위한 샘플도 제공하지 않는다고 한다.)

일부 새창열기를 시도한 사내 모바일 웹페이지도 있고,
제휴사 페이지에서도 팝업을 사용한 곳이 나올 수 있는 관계 상
해당 이슈의 처리를 시도했다.

안드로이드의 경우, window.-open과 close한 웹 페이지의 스냅샷을 그대로 전달받을 수 있는 메서드를 웹뷰에서 제공한다.
덕분에 open이 전달되면 해당 메소드에서 새 웹뷰를 생성하여 스냅샷을 그대로 넘겨주고,
close가 전달되면 해당 메소드에서 생성한 웹뷰를 닫아주면 브라우저와 동일한 기능을 구현할 수 있다.
(안드로이드의 경우는 간단하게 해당 내용 검색이 가능하다.)

하지만 IOS 의 경우는 스냅샷을 그대로 전달받을 수 있는 메서드를 제공하지 않는다.
그래서 할 수 있는 방법은 오직 window.-open과 close를 JS로 재설정하여
ex) window.-open -> open:// + url , window.-close -> close://
예와 같이 주소가 호출되도록 설정한 다음,
open://에 대해서는 새 웹뷰를 만들고 url를 전달,
close://에 대해서는 새 웹뷰를 종료하는 식으로 기본 형식을 만들었다.

문제는 스냅샷이 아니라 단순히 url을 웹뷰에 전달했기 때문에
부모창과 자식창의 관계가 아닌 크롬과 익스 같이 서로 소통할 수 없는 웹페이지가 되어버린다.
이 문제 해결을 위해 java-s!cripCore를 사용하여 opener의 정보를 새로 생성한 웹뷰에 넣어줘 봤지만,
소용이 없다 -_-;

결국 부모창과 자식창의 데이터 전달은 포기하고 단순히 새창호출/닫기 기능만 구현했다.
구현상태로는 인증정보 전달도 불가능한 터라 해당 페이지는 IOS 웹뷰를 예외로 처리하고,
예외의 경우에는 사파리로 전달하여 처리하도록 했다.
성과는 새창열기를 시도한 다른페이지를 지원한 정도가 한계였다.


신고

 

후지사키시오리    친구신청

웹뷰와 웹뷰가 안드로이드와 달라 유기적으로 연결되지 않아서 서로 값전달하기가 애매하신것 같은데
노티피케이션 옵져버를 사용하시면 될겁니다.
뭔가의 뷰에서 갱신이된 데이타를 전달할때 다른 웹뷰에 옵져버를 등록해서 노티피케이션과 데이타를 날려주면 자바스크립트를 실행해서 웹뷰안에 데이타를 전달해주거나 쿠키에 값을 담아 리플래쉬... 등을 해주는 구조로 짜시면 될겁니다

Gumi    친구신청

답변 감사합니다.
흠.. 시도해보지 않는 방식이군요.
앱간 데이터 전달처럼 해보란 말씀같은데 도전해보도록 하겠습니다.
X