android
6. WebSettings 안드로이드 공식문서 공부
코코넛딩
2023. 9. 23. 21:00
공식문서를 구글 번역기와 챗지피티로 공부한 내용입니다. 틀린 내용있으면 댓글 달아주세요.
메소드
public abstract boolean getAllowContentAccess ()
- 이 웹뷰가 콘텐츠 URL 엑세스를 지원하는지 여부를 가져온다.
- 콘텐츠 URL 엑세스
- 웹뷰가 외부 URL로 부터 콘텐츠를 로드하고 표시하는 능력을 나타낸다.
- 외부 URL : 다른 도메인 또는 웹사이트에서 호스팅되고 있는 웹페이지나 리소스
- 예) http:// ftp://
- 콘텐츠 URL 엑세스가 지원되는 경우 웹뷰는 인터넷이나 다른 외부 소스로부터 웹 페이지, 이미지 및 리소스를 로드하고 표시할 수 있다.
- 웹뷰가 외부 URL로 부터 콘텐츠를 로드하고 표시하는 능력을 나타낸다.
- 이 설정은 보안 및 개인 정보 보호 고려 사항을 고려할 때 웹뷰의 콘텐츠 로딩 동작을 제어하는 데 사용될 수 있다.
public abstract boolean getAllowFileAccessFromFileURLs ()
- file scheme URL(file://example.txt)의 context에서 실행되는 JavaScript가 다른 file scheme URL의 콘텐츠에 엑세스할 수 있는지 여부를 가져온다.
- true : 웹뷰가 로컬 파일 시스템에서 파일을 열거나 읽을 수 있게한다.
- false : 웹뷰가 로컬파일에 액세스 할 수 없다.
- 파일의 예시
- 로컬 HTML 파일 : 앱 내부에 저장된 HTML 파일
- 이미지 파일 : JPEG,PNG,GIF
- CSS 파일
- JavaScript 파일 : 자바스크립트 코드가 포함된 .js 파일
- 텍스트 파일 : .txt
- PDF 파일
- 동영상, 오디오 파일
- 웹페이지에서 다운로드 가능한 파일
public abstract void setAllowFileAccess (boolean allow)
- WebView 내에서 파일 엑세스를 활성화하거나 비활성화합니다.
- true : 웹 페이지에서 로컬 파일(예:이미지, 스타일 시트, 자바스크립트 파일)에 액세스할 수 있습니다.
- false : 웹 페이지에서 로컬 파일에 대한 엑세스가 거부됩니다.
- 안전한 WebView 사용
- 외부에서 제공되는 file://URLs를 웹뷰에서 열지 않는 것이 중요하다.
- 보안 문제가 있을 수 있으니 애플리케이션이 외부 소스로 부터 임의의 URLs를 받는 경우에는 이 기능을 활성화하지 않아야 합니다.
- WebAssetLoader 사용 권장
- androidx.webkit.WebViewAssetLoader 를 사용하여 파일, 에셋 및 리소스에 접근하는 것이 권장됩니다.
- http:// 또는 https:// 스킴을 통해 이러한 리소스에 접근할 수 있습니다.
- 보안 문제 예방
- 안드로이드 10 버전 이하의 경우 file://URLs를 WebView에서 열 경우 보안 문제가 발생할 수 있습니다.
- 따라서 가능한 경우 이 값을 false로 명시적으로 설정하여 보안 문제를 예방하는 것이 좋습니다.
public abstract void setAllowFileAccessFromFileURLs (boolean flag)
- 안드로이드 WebView에서 file:// 스킴 URL 컨텍스트 내에서의 Cross-Origin Requests가 다른 file:// 스킴 URL로부터의 콘텐츠 엑세스를 허용할지 여부를 설정
- Cross-Origin Request
- 웹 보안 정책 중 하나, 웹페이지나 스크립트가 원래와는 다른 출처에 있는 리소스를 요청할 때 브라우저에서 적용하는 보안 메커니즘입니다.
- 출처(orgin)는 URL스킴(예: http://, https://), 호스트, 포트 번호로 정의된다.
- 같은 출처에서 온 리소스 요청은 기본적으로 허용되지만 다른 출처에서 온 요청은 보안상의 이유로 제한된다.
- Cross-Origin Request 허용
- 이 설정은 'file://' 스킴 URL(예:이미지, 스타일 시트, 자바스크립트 파일)로 로드된 웹페이지에서 다른 'file://' 스킴 URL로 부터의 콘텐츠 엑세스를 허용할지 여부를 결정한다.
- Cross-Origin-Request은 일반적으로 동일 출처 정책(Same-Origin-Policy)에 따라 제한됩니다.
- 이미지 HTML 요소와 예외
- 이 설정은 이미지 HTML요소 등과 같이 일부 요소에는 동일 출처 규칙이 적용되지 않을수 있음을 언급하고 있다.
- 따라서 이 설정을 통해 모든 콘텐츠에 대한 엑세스 권한을 통제하는 것은 아니다.
- 보안 고려 사항
- 외부 소스에서 생성 또는 변경될 수 있는 파일을 열 경우에는 이 설정을 활성화하지 않아야한다.
- 이 설정을 활성화하면 'file://'컨텍스트에서 로드된 악의적인 스크립트가 웹뷰 쿠키 및 앱 개인 데이터를 포함한 임의의 로컬파일에 엑세스할 수 있으므로 보안 문제가 발생할 수 있습니다.
- file:// URLs 사용에 대한 권고
- file:// URLs를 통한 콘텐츠 로딩은 일반적으로 권장되지 않습니다.
- 대신 WebViewAssetLoader 를 사용하여 로컬 파일 및 리소스에 접근하는 것이 권장됩니다.
- 이러한 방식은 http:// 또는 https:// 스킴을 통해 로컴 콘텐츠에 접근할 때 더 안전합니다.
- 다른 설정과 연관
- 이 설정 값은 getAllowUniversalAccessFromFileURLs() 메서드 값이 true인 경우에는 무시됩니다.
- 또한 버전별로 기본값이 다르며 특정 버전을 대상으로 할 때 명시적으로 설정해야하는 경우도 있습니다.
public abstract void setBlockNetworkImage (boolean flag)
- 웹뷰에서 네트워크(즉, http 및 https URI schemes를 통해 엑세스되는)이미지 리소스를 로드하지 않도록 설정하는 데 사용됩니다.
- getLoadsImagesAutomatically()
- getLaodsImagesAutomatically()는 웹뷰가 이미지 리소스를 자동으로 로드해야 하는지 여부를 결정하는 설정입니다.
- 이 설정이 true로 되어있어야만 이미지 리소스를 로드할 수 있습니다.
- 설정 변경 시의 동작
- 이미지 리소스 로딩 설정을 true에서 false로 변경하는 경우, 현재 WebView에 표시된 콘텐츠에서 네트워크 이미지 리소스가 자동으로 가져와집니다.
- 이것은 웹페이지를 동적으로 업데이트하고 이미지를 로드할 때 유용합니다.
- 기본값
- 이 설정의 기본값은 false입니다. 따라서 WebView는 기본적으로 네트워크 이미지 리소스를 자동으로 로드하려고 시도합니다.
public abstract void setBlockNetworkLoads (boolean flag)
- setBlockNetworkLoads(boolean)
- setBlockNetworkLoads(boolean)설정은 모든 네트워크 로드를 비활성화 하도록 설정합니다.
- 즉 네트워크에서 데이터를 로드하는 모든 작업을 중지 시킨다.
- 이 설정이 true로 설정된 경우 네트워크 이미지도 로드되지 않는다.
public abstract void setDatabaseEnabled (boolean flag)
- database store API를 활성화할지 여부를 결정한다.
- 활성화 하면 웹뷰가 웹페이지에서 로컬 데이터 베이스를 사용할 수 있다.
- 기본값
- false
- setDatabasePath(String)
- 데이터 베이스 저장 경로를 설정할 수 있다.
- 설정 한 후에 database store API를 활성화하면 웹뷰는 해당 경로에 데이터베이스를 만들고 사용할 수 있다.
- android 10 부터 deprecate됨
- android 11 부터는 웹뷰는 앱의 데이터 디렉터리에 데이터베이스를 자동으로 저장하고 관리한다.
- 사용자 정의 데이터베이스 경로를 설정할 필요가 없다.
- 전역 설정
- 이 설정은 프로세스 내의 모든 웹뷰 인스턴스에 대해 전역적으로 적용된다.
- 즉, 한 번 설정하면 동일한 프로세스 내의 모든 웹뷰에서 동일한 설정이 적용된다.
- 주의 사항
- 설정 변경시의 주의가 필요하다.
- 웹뷰 로드 이전에만 이 설정을 수정해야한다. 웹뷰 페이지가 로드된 후에는 웹뷰 구현에서 이 설정 변경을 무시할 수 있다.
javaScriptEnabled = true
- WebView에서 JavaScript 실행을 활성화 합니다.
loadWithOverviewMode = true
- 페이지가 처음 로드될 때 전체 너비로 확장되어 전체페이지가 화면에 보이도록 합니다.
useWideViewPort = true
- HTML의 'viewport' 메타 태그가 WebView의 콘텐츠를 화면 너비에 맞추도록 한다.
allowFileAccess = true
- 파일 엑세스를 허용합니다.
- 이를 통해 WebView가 file URI로 부터 콘텐츠를 로드할 수 있습니다.
builtInZoomControls = false
- 내장 줌 컨트롤을 비활성화하고 줌 지원을 끕니다.
setSupportZoom(false)
- 내장 줌 컨트롤을 비활성화하고 줌 지원을 끕니다.
blockNetworkImage = false
- 네트워크의 이미지의 로딩을 차단하지 않습니다.
mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
- 보안된 HTTPS 페이지에서 비보안 HTTP 콘텐츠를 로드할 수 있도록 허용합니다.
loadsImagesAutomatically = true
- 이미지가 자동으로 로드되도록 허용합니다.
javaScriptCanOpenWindowsAutomatically = true
- javascript가 자동으로 윈도우를 열수 있도록 허용합니다.
databaseEnabled = true
- WebView 데이터 베이스 저장기능 활성화 합니다.
domStorageEnabled = true
- DOM 스토리지를 활성화합니다.
setSupportMultipleWindows(true)
- WebView가 여러 창을 지원하도록 설정한다.
defaultTextEncodingName = "utf-8"
- 기본 텍스트 인코딩을 UTF-8로 설정한다.
textZoom = 100
- 텍스트 줌 비율을 기본값(100%)로 설정한다.
safeBrowsingEnabled = true
- android oreo 이상에서만 WebView에 안전한 브라우징 기능을 활성화하여 사용자를 악성 콘텐츠로 부터 보호한다.