WebView Setting 속성 정리
@SuppressLint("SetJavaScriptEnabled")
private fun webViewSetting(webView: WebView) {
val webSettings = webView.settings
webSettings.apply {
//기본 설정
//자바 스크립트 사용 허용
javaScriptEnabled = true
//컨텐츠 크기에 맞게 화면 맞춤
loadWithOverviewMode = true
//뷰 포트 설정
useWideViewPort = true
//DOM저장소 사용
domStorageEnabled = true
//파일 접근 허용
allowFileAccess = true
//자바 스크립트로 새 창 열기 허용
javaScriptCanOpenWindowsAutomatically = true
//멀티 윈도우 지원
setSupportMultipleWindows(true)
//file://로 로드된 로컬HTML파일이 다른 로컬파일에 접근 할 수 있게 허용
allowFileAccessFromFileURLs = true
//캐시 사용 기본 설정
cacheMode = WebSettings.LOAD_DEFAULT
//웹 페이지의 텍스트와 레이아웃을 어떻게 배치 할지 설정
layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS
//플러그인 자동 실행 여부
pluginState = WebSettings.PluginState.ON
//HTTPS페이지 안에서 HTTP콘텐츠 허용 여부
mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
//비디오나 오디오 자동 재생 여부 (false가 자동 재생 허용)
mediaPlaybackRequiresUserGesture = false
//웹 콘텐츠를 Chrome개발자 도구로 디버깅 할 수 있게 해주는 설정(inspect)
WebView.setWebContentsDebuggingEnabled(false)
//웹페이지의 이미지를 자동으로 불러올지 여부를 설정
loadsImagesAutomatically = true
//웹 페이지의 기본 문자 인코딩 방식 지정
defaultTextEncodingName = "utf-8"
//줌 관련
//줌 기능 허용
setSupportZoom(true)
//줌 컨트롤 사용
builtInZoomControls = true
//줌 컨트롤 UI숨김
displayZoomControls = false
}
}
private fun setScrollBarDisable(webView: WebView) {
webView.apply {
//수직 스크롤바 노출 여부
isVerticalScrollBarEnabled = false
//수직 스크롤바 웹뷰 내용 위에 겹쳐서 표시 노출 여부
setVerticalScrollbarOverlay(false)
//수평 스크롤 바 노출 여부
isHorizontalScrollBarEnabled = false
//수평 스크롤바 웹뷰 내용 위에 겹쳐서 노출 여부
setHorizontalScrollbarOverlay(false)
}
}
javaScriptEnabled
true: 자바 스크립트 코드 실행 가능
false: 자바 스크립트 실행 불가능
loadWithOverviewMode
true: 웹페이지가 화면 크기에 맞춰 전체가 보이도록 축소되서 로드
false: 웹페이지 원래 크기로 로드되고, 사용자가 스크롤 하거나 확대/축소해야 전체를 볼 수 있음
useWideViewPort
true: <meta name="viewport" ..> 태그 인식 가능, 웹페이지 레이아웃을 디바이스 화면 너비에 맞게 조정
false(default): 기본 너비를 사용해 페이지 렌더링
domStorageEnabled
true: WebView내의 HTML5의 로컬 스토리지와 세션 스토리지 같은 DOM Storage기능 활성화
false(default): DOM Storage기능 비활성화, 일부 기능 제한
** DOM Storage란 웹페이지가 데이터를 브라우저 안에 저장할 수 있도록 해주는 기능이다.
localStorage와 sessionStorage두가지 종류가 있으며
localStorage는 창을 닫아도 데이터가 남아 있다 (반 영구적)
sessionStorage는 탭을 닫으면 데이터가 사라짐(세션 동안만 유지)
allowFileAccess
true: 웹 페이지가 기기의 내부 파일에 접근 할 수 있게 허용 (file://주소의 파일을 읽을 수 있게 허용)
false: 웹페이지가 기기의 내부 파일에 접근 할 수 있게 허용하지 않음
*보안 주의 -> 외부에서 불러온 웹사이트인 경우엔 false권장
javaScriptCanOpenWindowsAutomatically
true: 자바스크립트가 새 창을 자동으로 열 수있게 허용 (javascript -> window.open() 허용)
false(default): 자바스크립트가 새 창을 자동으로 열 수 없음
** 주의 광고나 악성 스크립트가 사용자 몰래 팝업을 열 수도 있음
setSupportMultipleWindows
true: 여러 창을 호출할 수 있게 지원 해줌 (javascript -> window.open() 실제 실행, javaScriptCanOpenWindowsAutomatically와 함께 true로 설정해야 함)
false(default): 여러 창을 호출할 수 없음
allowFileAccessFromFileURLs
true: file://주소로 로드된 웹페이지가 다른 파일에도 접근 가능 (신뢰된 페이지에서만 사용 권장)
false(default): 접근 불가능
cacheMode
웹페이지 데이터를 캐시에서 불러올지, 네트워크에서 새로 받을지 결정하는 설정
WebSettings.LOAD_DEFAULT
-> 기본 설정, 인터넷이 연결되어 있으면 항상 새로 로드하고 연결되어 있지 않은 경우에는 캐시 사용
WebSettings.NO_CACHE (항상 최신 데이터를 보여줘야 하는 경우)
-> 캐시 사용 X
WebSettings.LOAD_CACHE_ELSE_NETWORK (오프라인에서도 앱이 잘 동작해야 하는 경우)
-> 캐시에 데이터가 있는 경우 캐시 사용, 없는 경우 네트워크 요청
WebSettings.LOAD_CACHE_ONLY (오프라인에서도 앱이 잘 동작해야 하는 경우)
-> 항상 캐시만 사용 네트워크 요청 X
**캐시 지우는 방법 webView.clearCache(true)
layoutAlgorithm
HTML콘텐츠의 배치 방식을 설정하는 속성으로 Android10 (API29)부터 Deprecated됨
WebSettings.LayoutAlgorithm.NORMAL -> 기본 레이아웃 방식, 웹 브라우저처럼 표준대로 배치
WebSettings.LayoutAlgorithm.SINGLE_COLUMN -> 콘텐츠를 하나의 열로 정렬 (줄바꿈 포함)
WebSettings.LayoutAlgorithm.NARROW_COLUMNS -> 콘텐츠를 좁은 화면에 자동 맞춤
WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING -> 텍스트 크기를 자동으로 조정
pluginState
WebView에서 플러그인(Flash 등)을 사용할 수 있게 할지를 설정하는 속성이지만 Android 5.0 (API21)이상 부터는 플러그인 자체가 제거되어 동작하지 않음
mixedContentMode
혼합 컨텐츠를 어떻게 처리할지 설정하는 속성
WebSettings.MIXED_CONTENT_NEVER_ALLOW -> 혼합 콘텐츠 전부 차단 (default)
WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE -> 안전한 일부 콘텐츠만 허용(이미지) - 권장됨
WebSettings.MIXED_CONTENT_ALWAYS_ALLOW -> 모든 혼합 콘텐츠 허용(보안 취약)
**혼합 컨텐츠란https://로 열린 웹페이지에서 http://리소스를 불러오는 경우를 지칭한다. (http이미지, 스크립트, iframe 등을 사용하는 경우)
mediaPlaybackRequiresUserGesture
웹 뷰에서 오디오나 비디오같은 미디어가 자동으로 재생 될 수 있는지를 설정하는 속성
true(default): 사용자가 클릭 등 제스처를 해야만 재생 가능
false: 자동 재생 허용 (html에서 autoplay와 muted 속성을 같이 넣어줘야 자동재생됨 - 보안을 위해 대부분의 브라우저는 소리나는 미디어의 자동 재생을 막고있음)
loadsImagesAutomatically
웹뷰에서 이미지를 자동으로 로드할지 여부를 묻는 속성
true(default): 웹페이지에 포함된 이미지들을 자동으로 로드
false: 이미지 로드를 자동으로 하지 않음(텍스트만 보여짐)