일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Akka
- 스칼라 동시성
- 파이썬
- hyperledger fabric
- 이더리움
- 스칼라 강좌
- 주키퍼
- 하이브리드앱
- 플레이프레임워크
- 엔터프라이즈 블록체인
- 안드로이드 웹뷰
- Golang
- CORDA
- Actor
- akka 강좌
- Adapter 패턴
- play2 강좌
- 파이썬 데이터분석
- Hyperledger fabric gossip protocol
- 블록체인
- 파이썬 머신러닝
- 스위프트
- 파이썬 동시성
- Play2
- Play2 로 웹 개발
- 스칼라
- 하이퍼레저 패브릭
- 그라파나
- 파이썬 강좌
- play 강좌
- Today
- Total
HAMA 블로그
[안드로이드 웹뷰] 네비게이션 핸들링 본문
이 글의 요약
- 원하는 URL 만 웹뷰로 보여주고, 나머지는 모바일 브라우저를 새창으로 띄우고 싶을때
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.html5rocks.com/");
안드로이드에 webview 를 추가한후에 이것만 코딩한후에 실행시켜보면 , 의도와는 다르게
앱 내부의 webview 에서 페이지가 뜨는것이아니라, 외부 브라우저를 통해서 띄우려고 할것인데..
이벤트가 일어나는 순서는 :
- WebView 는 리모트서버로부터 원래 URL 로딩을 시도하고, 새로운 URL 로 리다이렉트를 갖는다.
- WebView 는 시스템이 URL 에 대해 뷰 인텐트를 핸들링할수있는지 체크하고 만약 그렇다면 시스템은 URL 네비게이션을 핸들링한다. 그렇지 않으면 웹뷰는 내부적으로 네비게이트할것이다. (즉, 디바이스에 브라우저가 없다면)
- 시스템은 사용자의 http:// URL 을 핸들링할수있는 더 나은 어플리케이션을 선택한후 (즉, 사용자 디폴트 브라우저) 만약, 브라우저가 많으면 아래처럼 선택창을 띄운다.
만약 , 어플리케이션의 내부의 웹뷰를 통해서 보고싶으면 WebView 로 부터의 다양한 이벤트를 핸들링할수있는 WebViewClient 를 오버라이딩해야한다.
아래 같은 기본 WebViewClient 구현은 웹뷰에서 어떤 URL 이나 열수있게 한다.
// 브라우저 대신해 WEBVIEW 로 열기위해 강제로 링크하고 리다이렉트한다.
webView.setWebViewClient(new MyAppWebViewClient());
public class MyAppWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
return false;
}
}
return true 로 하면 처리하지 않는다. (웹뷰에 아무것도 나타나지 않음)
그럼 다른 싸이트 말고, 원하는 싸이트만 열수있게 하려면 어떻게 해야하는가?
shouldOverrideUrlLoading 메소드를 오버라이딩하면 된다.
아래와 같이 코드를 추가해보자.
public class MyAppWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if(Uri.parse(url).getHost().endsWith("html5rocks.com")) { return false; } Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); view.getContext().startActivity(intent); return true; } }
URL 이 html5rocks.com 으로 끝나는것은 내부 웹뷰에서 처리한다는 뜻이다. 리턴 false 는 그 자신이 처리한다는 뜻이고, 만약 다른 URL 이라면 새로운 안드로이드 Intent 를 사용해서 새로운 액티비티 (설치된 모바일 브라우저) 를 호출하게된다.
레퍼런스 :
https://developer.chrome.com/multidevice/webview/gettingstarted
'안드로이드' 카테고리의 다른 글
[안드로이드 웹뷰] 파일 시스템으로 부터 HTML 로딩 (0) | 2015.08.21 |
---|---|
[안드로이드 웹뷰] 돌아가기 버튼 핸들링 (0) | 2015.08.21 |
안드로이드 제목바(타이틀바) 없애기 (0) | 2015.07.31 |
안드로이드의 HTTP Client 선택 - (번역) (0) | 2015.07.24 |
안드로이드에서 서비스 와 쓰레드의 차이 (0) | 2015.06.30 |