# 웹뷰 설정

## 1. Inappwebview 추가

```dart
flutter pub add inappwebview
```

터미널에 해당 명령어를 입력하여 패키지 추가

<details>

<summary><strong>플랫폼 사전 설정</strong></summary>

* 안드로이드

  android/app/src/main/AndroidManifest.xml 에 권한 추가

  ```dart
  <uses-permission android:name="android.permission.INTERNET" />
  ```

  ⚠️ The plugin flutter\_inappwebview requires a higher Android SDK version 오류가 발생한다면 SDK 최소버전 문제이므로 android/app/build.gradle 내 minSdkVersion를 17이상으로 지정해주자!
* iOS

  ios/Runner/Info.plist에 권한 추가

  ```swift
  <key>NSAppTransportSecurity</key>
  	<dict>
  		<key>NSAllowsArbitraryLoads</key><true/>
  	</dict>
  ```

권한을 추가 안하여도 실행은 가능, 권한 추가 차이 추후 확인 필요

</details>

Flutter Main 함수 내 메서드 호출 추가

```dart
void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}
```

## 2. Inappwebview 기본 세팅

* key

  위젯을 고유하게 식별하는데 사용되며, 위젯의 상태를 유지하고 특정 위젯을 식별하여 조작할 수 있다.

  GlobalKey를 선언하여 key값으로 넣어줌
* initialUrlRequest

  웹 뷰를 처음 실행할 때 초기 URL 요청으로, 로드 될 URL 뿐만 아니라 HTTP 메소드(GET, POST 등), 헤더, 캐시 정책, 타임아웃 및 기타 요청 관련 정보가 포함 될 수 있다.
* initialFile

  웹뷰가 로드될 때 처음에 표시할 로컬 파일의 경로를 지정한다. 이를 통해 앱의 로컬 파일 시스템에 저장된 HTML 파일 등을 웹뷰에서 로드할 수 있다.
* initialData

  HTML 문자열이나 데이터를 지정하여 웹뷰가 처음에 표시할 내용을 설정한다. 이를 통해 문자열 형태의 HTML 데이터를 직접 웹뷰에 전달하여 초기 페이지로 표시할 수 있다.
* initialUserScripts

  웹뷰가 로드되면서 삽입될 사용자 지정 스크립트를 정의한다. 이를 통해 로드 되는 동안 추가적인 스크립트를 삽입하여 웹페이지의 동작을 변경하거나 특정 기능을 추가할 수 있다.
* contextMenu

  컨텍스트 메뉴의 동작을 설정한다. 사용자가 웹뷰 내에서 요소를 길게 누르면 표시되는 컨텍스트 메뉴의 동작(링크 열기, 링크 새 탭에서 열기, 이미지 저장, 이미지 공유 등)을 커스터마이징 할 수 있다.
* implementation

  플랫폼별로 웹뷰 구현체를 지정하는 데 사용. 특정 플랫폼(Android 또는 iOS)에서만 작동하는 웹뷰 구현체를 선택할 수 있다.
* windowId

  웹뷰의 윈도우 ID를 설정하여 웹뷰간의 통신등에 사용된다.
* Progress

  double 형태로 progress 초기값 0으로 선언하여 onProgressChanged 등에 사용할 수 있다.

  이를 통해 웹뷰가 켜지는 진행상태를 화면에 노출 시킬 수 있다.
* InAppWebViewController

  onWebViewCreated에서 웹뷰 컨트롤러를 선언하여 여러 웹뷰 함수에 설정하고 제어할 수 있다.

<details>

<summary>InAppWebViewController Function Example</summary>

🌟 표시는 자주 사용됨

* 🌟 getUrl() : 현재 페이지의 Url 주소를 받아옴. Future\<Uri?>로 반환
* getTitle() : 현재 페이지의 타이틀을 받아옴. Future\<String?>로 반환
* getProgress() : 현재 페이지의 progress로 받아옴. Future\<int?>로 반환되며 0 \~ 100 사이값
* 🌟 loadUrl(URLRequest(Uri.parse(**String url**)))) : 해당 url 페이지를 띄움. URLRequest를 통해 ‘GET’, ‘POST’ 요청 전송 둘 다 가능
* postUrl(Uri.parse(**String url**),**Uint8List**) : Data를 넣어 Post 형식으로 전송 해당 url 페이지를 띄움. 위 loadUrl의 URLRequest에 method를 ‘POST’로 설정하고 body를 넣어 보낼때와 차이점 은 없는 듯.
* loadData(**String data, {String mimeType = 'text/html', String encoding = 'utf8', String? baseUrl}**) : 문자열 데이터를 사용해 로드.
* loadFile(**String assetFilePath, {Map\<String, String>? headers}**) : 앱 내부의 파일을 webview로 띄움.
* 🌟 reload() : 현재 페이지를 다시 로드함.
* 🌟 goBack() : 이전 페이지로 이동.
* canGoBack() : 이전 페이지를 이동할 수 있는지 확인함. Future\<bool>로 반환
* 🌟 goForward() : 다음 페이지로 이동.
* canGoForward() : 다음 페이지를 이동할 수 있는지 확인함. Future\<bool>로 반환
* isLoading() : 웹뷰 상태가 로딩중인지 확인함. Future\<bool>로 반환
* 🌟 stopLoading() : 로딩중인 웹뷰를 중단시킴.
* 🌟 evaluateJavascript(**String source**) : 웹뷰 내에서 해당 자바스크립트 소스를 실행시킴.
* addUserScript(**UserScript**) : 웹뷰 내에 해당 스크립트 소스를 추가함.

  **evaluateJavascript()** vs **addUserScript()**

  evaluateJavascript()는 현재 실행중인 웹뷰에 자바스크립트 코드를 실행하고 결과 값을 반환 받을 수 있다. 페이지가 로드된 후에 자바스크립트를 실행하거나 특정 이벤트에 대한 응답으로 자바 스크립트를 실행하는데 사용된다.

  addUserScript()는 사용자가 정의한 자바스크립트 코드를 웹뷰에 추가하는데 사용되며 페이지가 로드될 때 자동으로 웹뷰에 삽입된다. 웹 페이지 동작을 변경하거나 보완할때 사용된다.
* 🌟 addJavaScriptHandler(**String handlerName, JavaScriptHandlerCallback callbackFunction**) : JavaScript와 Flutter 간에 통신하기 위한 JavaScript 핸들러를 추가함.
* removeJavaScriptHandler(**String handlerName**) : 해당 JavaScript 핸들러 삭제
* setOptions(**InAppWebViewGroupOptions options**) : 웹뷰에 옵션을 추가함. 옵션 내용은 아래 \[InAppWebViewGroupOption] 참조.
* getOptions() : 현재 웹뷰 옵션을 불러옴. Future\<InAppWebViewGroupOptions?>로 반환.
* 🌟 clearCache() : 웹뷰 캐시를 삭제.
* scrollBy(**int x, int y, bool animated**) : 현재 웹뷰 페이지 스크롤을 원하는 위치로 이동시킴.
* getScrollX() : 현재 웹뷰의 좌측으로 부터 스크롤 위치값 반환. Future\<int?> 로 반환
* canScrollVertically() : 수직 스크롤이 가능한지 확인함. Future\<bool>로 반환
* getScrollY() : 현재 웹뷰의 상단으로 부터 스크롤 위치값 반환. Future\<int?> 로 반환
* canScrollHorizontally() : 수평 스크롤이 가능한지 확인함. Future\<bool>로 반환
* zoomBy(**double zoomFactor**) : 현재 웹뷰를 해당 비율로 확대/축소 함.
* getZoomScale() : 현재 웹뷰의 확대/축소 비율을 불러옴. Future\<double?> 로 반환

</details>

* PullToRefreshController

  당겨서 새로고침 컨트롤러를 선언하여 상단을 끌어내렸을때, 새로고침 되는 함수나 테마를 설정하고 제어할 수 있다.

  ```dart
  // 당겨서 새로고침 컨트롤러 설정
      pullToRefreshController = PullToRefreshController(
        options: PullToRefreshOptions(
          color: Colors.blue, // 새로고침 아이콘 색상
        ),
        // 플랫폼별 새로고침
        onRefresh: () async {
          if (Platform.isAndroid) {
            webViewController?.reload();
          } else if (Platform.isIOS) {
            webViewController?.loadUrl(
                urlRequest: URLRequest
  							(url: await webViewController?.getUrl()));
          }
        },
      );
  ```
* InAppWebViewGroupOption

  웹 뷰를 설정하는 옵션들로 공용 옵션, android용 옵션, iOS용 옵션으로 나누어져 있다.

<details>

<summary><strong>crossPlatform option</strong></summary>

크로스플랫폼 공용의 옵션.

🌟 표시는 자주 사용됨

* 🌟 useShouldOverrideUrlLoading : ShouldOverrideUrlLoading 사용 여부. 기본값은 false
* 🌟 useOnLoadResource : OnLoadResource 사용 여부. 기본값은 false
* 🌟 useOnDownloadStart : useOnDownloadStart 사용 여부. 기본값은 false
* clearCache : 새로운 웹뷰가 오픈되기전에 모든 브라우저의 캐시를 클리어함. 기본값은 false
* userAgent : Webview가 서버로 보내는 사용자 에이전트 문자열를 정의함. 사용자 에이전트는 클라이언트(브라우저나 앱)가 서버에게 전송하는 정보로 일반적으로 OS, 버전, 기기, 웹 브라우저 등과 같은 사용자 식별 정보를 유저에이전트 HTTP 헤더에 일정한 구조로 담고 있다.
* applicationNameForUserAgent : 사용자 에이전트에 추가할 애플리케이션 이름을 정의 이 값은 사용자 에이전트에 애플리케이션의 이름을 추가하여 서버가 해당 앱을 인식할 수 있도록 함.
* javaScriptEnabled : 자바스크립트 활성화 여부. 기본값은 true
* javaScriptCanOpenWindowsAutomatically : 새 창(팝업)을 열 때의 동작을 제어함. true일 때, 자바스크립트에서 ‘window\.open()’을 통해 팝업을 띄울 수 있으며 반대의 경우에는 자동 팝업이 차단된다. 기본값은 false
* mediaPlaybackRequiresUserGesture : 미디어(오디오나 비디오) 재생이 사용자 제스처를 필요로하는지 여부. 기본값은 true. 즉 자동재생 사용 유무
* minimumFontSize : 최소화 폰트 사이즈. 기본값은 android가 8, iOS가 0
* verticalScrollBarEnabled : 수직 스크롤바 표시 여부. 기본값은 true
* horizontalScrollBarEnabled : 수평 스크롤바 표시 여부. 기본값은 true
* resourceCustomSchemes : 사용자 정의 리소스 스키마 정의. WebView\.onLoadResourceCustomScheme을 통해 특정 스키마를 사용하여 리소스를 로드하고 혀용할 수 있다.
* contentBlockers : 컨텐츠 차단 리스트. 광고나 특정 콘텐츠 차단할때 사용.
* preferredContentMode : 선호하는 컨텐츠 모드 설정. 데스크탑이나 모바일 모드, 추천 모드 등을 설정할 수 있다.
* 🌟 useShouldInterceptAjaxRequest : Ajax 특정 요청을 간섭하여 내용을 변경하거나 재정의 할 수 있다. 기본값은 false.
* 🌟 useShouldInterceptFetchRequest : Fetch 특정 요청을 간섭하여 내용을 변경하거나 재정의 할 수 있다. 기본값은 false.
* incognito : incognito 모드(시크릿 모드)로 브라우저 실행 여부. 데이터나 캐시를 남기지 않는다. 기본값은 false
* cacheEnabled : 캐시 활성화 여부. 기본값은 true
* transparentBackground : 웹뷰 배경 투명하게 설정할 수 있다. 기본값은 false
* disableVerticalScroll : 수직 스크롤 활성화 여부. 기본값은 fasle
* disableHorizontalScroll : 수평 스크롤 활성화 여부. 기본값은 fasle
* disableContextMenu : 컨텍스트 메뉴 비활성화 여부. 기본값은 false
* supportZoom : 화면 확대/축소 지원 여부. 기본값은 true
* allowFileAccessFromFileURLs : URL을 통한 파일 접근 허용 여부. ‘file://’ URL을 통해 로드된 페이지가 로컬 파일에 접근 할 수 있으며 보안상의 이유로 기본값은 false
* allowUniversalAccessFromFileURLs : URL을 통해 로드된 페이지가 모든 도메인의 자원에 접근할 수 있는지에 대한 여부로 보안상의 이유로 기본값은 false

</details>

<details>

<summary>android option</summary>

android 플랫폼에만 적용되는 옵션

🌟 표시는 자주 사용됨

* textZoom : 텍스트 확대/축소로 기본값은 100.
* clearSessionCache : 각 윈도우가 열릴때마다 세션 캐시를 초기화 여부. 기본값은 false
* builtInZoomControls : 웹뷰에 내장된 확대/축소 컨트롤 활성화 여부. 기본값은 true
* displayZoomControls : 웹뷰의 확대/축소 컨트롤 표시 여부. 기본값은 false
* databaseEnabled : database 저장소(HTML5 Web SQL 데이터베이스) API 활성화 여부. 기본값은 true
* domStorageEnabled : dom 저장소(웹페이지가 클라이언트 측에서 데이터를 저장하는 기능을 제공) API 활성화 여부. 기본값은 true
* 🌟 useWideViewPort : 와이드 뷰 포트 활성화 여부. 활성화시 뷰포트가 확장되어 줌인/아웃이 더 자유로워진다. 기본값은 true
* 🌟 safeBrowsingEnabled : Google Safe Browsing 활성화 여부. 이를 통해 사용자를 위협하는 악성 웹사이트로 부터 보호할 수 있다. 기본값은 true
* 🌟 mixedContentMode : 안전한 출처(HTTPS)에서 보안되지 않은 출처(HTTP)로부터 리소스를 가져올 때 WebView의 동작을 제어함
* 🌟 allowContentAccess : 컨텐츠 접근 권한 활성화 여부. 기본값은 true
* 🌟 allowFileAccess : 파일 접근 권한 활성화 여부. 기본값은 true
* appCachePath : 캐시 경로를 설정해줌. 어플리케이션 캐시 API가 활성화 되어있다면 해당 경로는 앱이 접근가능할 수 있어야한다.
* blockNetworkImage : 네트워크로 로드되는 이미지 리소스 블락 활성화 여부. 기본값은 false
* blockNetworkLoads : 네트워크로 로드되는 리소스 블락 활성화 여부. 이미지 뿐만 아니라 스크립트, 스타일시트, iframe 등 웹페이지의 모든 네트워크 리소스를 차단하며 기본값은 false
* 🌟 cacheMode : 캐시 모드 설정. 페이지 로딩시 캐시를 사용하거나 사용하지 않도록 설정이 가능하다. 기본값은 AndroidCacheMode.LOAD\_DEFAULT
* cursiveFontFamily : cursiveFont 설정. 손글씨체이며 기본값은 cursive
* defaultFixedFontSize : 고정 폰트 사이즈. 기본값은 16
* defaultFontSize : 기본 폰트 사이즈. 기본값은 16
* defaultTextEncodingName : 기본 텍스트 인코딩 설정. 기본값은 UTF-8
* disabledActionModeMenuItems : 웹뷰의 텍스트 선택시 나타나는 액션 메뉴내에 항목들(복사, 붙여넣기, 검색 등)을 지정하여 비활성화시킬 수 있다.
* fantasyFontFamily : fantasyFont 설정. 판타지 폰트이며 기본값은 fantasy
* fixedFontFamily : fixedFont 설정. 고정 폰트이며 기본값은 monospace
* forceDark : 웹뷰의 다크모드 설정. 기본값은 AndroidForceDark.FORCE\_DARK\_OFF
* 🌟 geolocationEnabled : 지리 위치 정보 사용 활성화 여부. 기본값은 true
* layoutAlgorithm : 컨텐츠를 렌더링할 때 사용하는 레이아웃 알고리즘을 설정함. 페이지의 컨텐츠를 화면에 어떻게 배치할지를 결정하는데 영향을 준다.
* loadWithOverviewMode : 페이지를 오버뷰모드로 로드할지 설정함. 기본값은 true이지만 useWideViewPort가 활성화 되어있다면 기본값은 false
* loadsImagesAutomatically : 이미지 자동 로딩 활성 여부. 기본값은 true
* minimumLogicalFontSize : 최소 논리적 폰트 사이즈. 기본값은 8
* needInitialFocus : 초기 포커스 활성화 여부. 기본값은 true
* offscreenPreRaster : Offscreen 렌더링(사용자가 스크롤하거나 화면을 이동할 때 부드러운 스크롤 및 애니메이션을 제공하기 위해 미리 이미지를 래스터링하여 준비하는 기술)을 사용할 때 사전 래스터링 활성화 여부로 기본값은 false
* sansSerifFontFamily : sans-serif 폰트 설정. 기본값은 “sans-serif”
* serifFontFamily : sans 폰트 설정. 기본값은 “sans-serif”
* standardFontFamily : 기본 폰트 설정. 기본값은 "sans-serif”
* saveFormData : 폼 데이터(아이디, 비밀번호 등) 저장 여부. 기본값은 true
* thirdPartyCookiesEnabled : 웹뷰 내 third party cookies(주로 도메인이 다른 두 웹사이트 간에 발생하는 쿠키) 활성화 여부. 기본값은 true
* 🌟 hardwareAcceleration : 웹뷰에서 하드웨어 가속화 사용 여부. 기본값은 true
* initialScale : 초기 확대/축소 비율. 기본값은 0으로 initialScale에 맞춰 웹뷰가 실행된다.
* supportMultipleWindows : 다중창 지원 활성화 여부. 기본값은 false
* regexToCancelSubFramesLoading : 해당 정규식 패턴(특정 도메인이나 패턴)에 맞는 서브 프레임의 로딩을 취소할 수 있다.
* useHybridComposition : useHybridComposition(\[렌더링 엔진 → 그래픽 엔진]을 사용하여 웹 콘텐츠를 표시) 활성화 여부. 기본값은 false
* 🌟 useShouldInterceptRequest : useShouldInterceptRequest 사용 여부. 웹 리소스 요청에 간섭할 수 있다. 기본값은 false
* useOnRenderProcessGone : useOnRenderProcessGone 사용 여부. 렌더링 프로세스가 종료될 때 이벤트 처리가 가능하다. 기본값은 false
* overScrollMode : 오버스크롤 모드 활성화 여부.
* networkAvailable : 네트워크 활성화 여부. 자바스크립트의 window\.navigator.isOnline을 설정하거나 온/오프라인 이벤트를 생성하는데 활용된다. 오프라인 상태에서 웹뷰를 사용하거나 특정 시나리오에서 네트워크 액세스를 제한할 때 사용됨
* scrollBarStyle : 스크롤바 스타일 설정
* verticalScrollbarPosition : 수직 스크롤바의 위치 지정
* scrollBarDefaultDelayBeforeFade : 스크롤바가 사라지기 전에 표시되는 시간 제어
* scrollbarFadingEnabled : 스크롤바 페이드 인/아웃 활성화 여부. 기본값은 true
* scrollBarFadeDuration : 스크롤바가 페이드 인/아웃되는데 걸리는 시간 제어
* rendererPriorityPolicy : 렌더링 우선 순위를 설정
* disableDefaultErrorPage : 기본 안드로이드 에러 페이지 활성화 여부. 기본값은 false
* verticalScrollbarThumbColor : 수직 스크롤바의 Thumb(바가 움직이는 부분) 색상 설정
* verticalScrollbarTrackColor : 수직 스크롤바의 Track(바 전체 영역) 색상 설정
* horizontalScrollbarThumbColor : 수평 스크롤바의 Thumb(바가 움직이는 부분) 색상 설정
* horizontalScrollbarTrackColor : 수평 스크롤바의 Track(바 전체 영역) 색상 설정

</details>

<details>

<summary>iOS option</summary>

iOS 플랫폼에만 적용되는 옵션

🌟 표시는 자주 사용됨

* disallowOverScroll : 오버스크롤 바운싱 효과 여부. 기본값은 false
* enableViewportScale : 뷰포트 스케일 활성화 여부로 페이지에서 화면 크기 조정 여부와 같다. 기본값은 false
* suppressesIncrementalRendering : 웹뷰에서 컨텐츠를 즉시 렌더링하는 것을 억제하고, 전체 컨텐츠를 받은 후 한꺼번에 렌더링하는지에 대한 여부이며, 기본값은 false
* allowsAirPlayForMediaPlayback : 미디어 재생시 airPlay 모드(애플의 무선 스트리밍 기술로, 사용자가 iOS 기기에서 오디오, 비디오, 사진 등을 Apple TV나 호환되는 다른 AirPlay 지원 장치로 전송할 수 있게 함) 지원 여부. 기본값은 true
* allowsBackForwardNavigationGestures : 앞/뒤 네비게이션 제스처 허용 여부. 기본값은 true
* allowsLinkPreview : 링크에 대한 미리보기 활성화 여부. 기본값은 true
* ignoresViewportScaleLimits : 뷰포트 스케일 제한 활성화 여부로 true일시 페이지가 화면 크기를 넘어서거나 제한 이상으로 더 크게 나타나게 할 수 있다. 기본값은 false
* allowsInlineMediaPlayback : 인라인 미디어(미디어 실행시 전체화면 재생이 아니라 페이지 내 인라인으로 재생되며 미디어 터치시 전체화면으로 재생) 재생 활성화 여부. 기본값은 false
* 🌟 allowsPictureInPictureMediaPlayback :PIP(Picture-in-Picture, 다른 앱이나 화면 위에 작은 창으로 띄울 수 있다) 미디어 재생 활성화 여부. 기본값은 true
* isFraudulentWebsiteWarningEnabled : 사기 사이트 경고 활성화 여부. 기본값은 true
* selectionGranularity : 텍스트 선택 정밀도(단위가 문자, 단어, 문장, 문단 등으로 설정됨)를 설정한다. 기본값은 IOSWKSelectionGranularity.DYNAMIC
* dataDetectorTypes : 자동으로 감지할 데이터 타입(전화번호, 이메일 등)을 설정한다. IOSWKDataDetectorTypes 타입으로 사용함
* sharedCookiesEnabled : 쿠키 공유 활성화 여부로 앱 내 여러 웹뷰 사용시 동일한 쿠키 세션을 공유하도록 하여 로그인 상태 등의 정보를 유지하는 데 사용된다. 기본값은 false
* automaticallyAdjustsScrollIndicatorInsets : 스크롤 바의 여백 자동 조정 여부. 기본값은 false
* accessibilityIgnoresInvertColors : 접근성 기능 중 반전 색상 차단 여부. 기본값은 false
* decelerationRate : 스크롤 감속률을 설정한다. 기본값은 IOSUIScrollViewDecelerationRate.NORMAL
* alwaysBounceVertical : 항상 수직 방향 스크롤 허용 여부. 허용시 크기가 작은 컨텐츠에서도 스크롤 기능이 가능하다. 기본값은 false
* alwaysBounceHorizontal : 항상 수평 방향 스크롤 허용 여부. 허용시 크기가 작은 컨텐츠에서도 스크롤 기능이 가능하다. 기본값은 false
* scrollsToTop : 스크롤링 시 맨 위로 스크롤을 자동으로 이동시킨다. 기본값은 true
* isPagingEnabled : 페이지 단위로 스크롤하도록 하는 옵션으로 기본값은 false
* maximumZoomScale : 최대 페이지 확대/축소 비율. 기본값은 1.0
* minimumZoomScale : 최소 페이지 확대/축소 비율. 기본값은 1.0
* 🌟 contentInsetAdjustmentBehavior : 스크롤뷰의 컨텐츠 여백 조정 동작을 설정한다. 기본값은 IOSUIScrollViewContentInsetAdjustmentBehavior.NEVER
* 🌟 isDirectionalLockEnabled : 스크롤 기능 제한(잠금) 여부. 기본값은 false
* 🌟 mediaType : 페이지를 렌더링할 때 사용되는 미디어 유형을 정의한다. print CSS와 관련된 웹페이지의 표시 방식을 결정한다
* pageZoom : 페이지 확대/축소 비율. 기본값은 1.0
* 🌟 limitsNavigationsToAppBoundDomains : 특정 앱에 바운드된 도메인으로의 네비게이션을 제한한다. 활성화시 특정한 앱 도메인에 바운드된 네비게이션만 허용한다. 기본값은 false
* 🌟 useOnNavigationResponse : OnNavigationResponse 사용 여부.
* shouldOverrideNavigation을 사용하면 페이지를 바로바로 제어할 수 있다. 기본값은 false
* applePayAPIEnabled : 애플페이 API 활성화 여부. 기본값은 false
* allowingReadAccessTo : 다른 출처의 컨텐츠에 대한 접근 허용하는 URL을 설정한다.
* 🌟 disableLongPressContextMenuOnLinks : 링크에 대한 길게 누르는 제스처로 나타나는 컨텍스트 메뉴 비활성화 여부. 기본값은 false
* 🌟 disableInputAccessoryView : 입력 액세서리 뷰(이모지, 자동완성 제안 등)를 비활성화 여부. 기본값은 false

</details>

## 3. Inappwebview 콜백 함수들을 통해 시점에 따라 기능 제어

* onWebViewCreated

  웹뷰가 생성 되었을 때 호출되는 콜백함수. 보통 웹뷰 컨트롤러나 초기 설정 등의 작업을 수행한다.
* onLoadStart

  페이지 로드가 시작될 때 호출되는 콜백함수. 로딩 인디케이터 노출이나 상태를 표시하고 로그를 기록하는 등의 작업을 수행한다.
* onLoadStop

  페이지 로드가 완료되었을 때 호출되는 콜백함수. 로딩 인디케이터를 감추거나 상태를 표시하고 로그를 기록하는 등의 작업을 수행한다.
* onLoadError

  페이지 로드 중 에러가 발생할 때 호출되는 콜백함수. 오류 상태와 에러를 전달한다.
* onConsoleMessage

  ‘console.log()’와 같은 자바스크립트 콘솔 메시지가 있을 때 호출되는 콜백함수. 해당 메시지를 앱으로 전달한다.
* shouldOverrideUrlLoading

  페이지 로드를 시도할 때 호출되는 콜백함수. InAppWebViewGroupOption에서 useShouldOverrideUrlLoading 옵션이 true로 설정되어 있어야한다. 페이지 로드의 흐름을 제어하고 특정 URL 로드를 중단하거나 허용, 리디렉션 관리 등의 작업을 수행한다.
* onLoadResource

  페이지 로딩 중에 리소스(이미지, 스크립트, 스타일시트 등)가 로드될 때 호출되는 콜백함수. 주로 로드된 리소스 추적하고 상태 확인, 특정 리소스의 동작 관리(특정 도메인의 리소스 차단, 특정 CSS파일의 로드 허용)등의 작업을 수행한다.
* onScrollChanged

  스크롤 이벤트가 발생할 때 호출되는 콜백함수. 스크롤 위치를 추적하여 상태에 따른 동작 제어, 그에 따른 UI 변경등의 작업을 수행한다.
* onDownloadStart

  파일 다운로드가 시작될 때 호출되는 콜백함수. 주로 다운로드 허용 및 차단, 다운로드 진행 상황이나 파일 관리등의 작업을 수행한다.
* onCreateWindow

  새 창(새로운 웹뷰 창)을 생성할 때 호출되는 콜백함수. 새 창을 생성하고 관리하며, 다중 창 처리 등의 작업을 수행한다.
* onCloseWindow

  웹뷰의 창(창 단위의 브라우징 세션)이 닫힐 때 호출되는 콜백함수. 창 닫기 관련 동작(해당 창의 리소스 해제, 관련 데이터의 정리 등)을 수행한다
* onJsAlert/onJsConfirm/onJsPrompt

  페이지에서 자바스크립트에서 alert()/confirm()/prompt()와 같은 다이얼로그 창을 요청했을 때 호출되는 콜백함수.
* onProgressChanged

  페이지 로딩의 진행 상태가 변경될 때 호출되는 콜백함수. 주로 페이지 로딩 진행률이 변경되면 이벤트를 처리한다.
* onReceivedServerTrustAuthRequest

  웹뷰에서 서버의 신뢰 인증 요청(SSL 인증서에 관한 신뢰성을 검증하거나 승인 등의 작업)을 받았을 때 호출되는 콜백함수. SSL 인증서를 검증하고 승인, 거부 및 사용자 확인 등의 작업을 수행한다.
* onReceivedHttpAuthRequest

  웹뷰에서 HTTP 기본 인증(일반적으로 사용자 이름과 비밀번호) 요청을 받았을 때 호출되는 콜백함수. 주로 인증 정보 제공, 인증 실패 시 처리나 다중 계정 처리등의 작업을 수행한다.
