react-native-webview.git

WebViewTypes.js 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. /**
  2. * Copyright (c) 2015-present, Facebook, Inc.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. *
  7. * @format
  8. * @flow
  9. */
  10. 'use strict';
  11. import type {Node, Element, ComponentType} from 'react';
  12. import type {SyntheticEvent} from 'CoreEventTypes';
  13. import type {EdgeInsetsProp} from 'EdgeInsetsPropType';
  14. import type {ViewStyleProp} from 'StyleSheet';
  15. import type {ViewProps} from 'ViewPropTypes';
  16. export type WebViewNativeEvent = $ReadOnly<{|
  17. url: string,
  18. loading: boolean,
  19. title: string,
  20. canGoBack: boolean,
  21. canGoForward: boolean,
  22. |}>;
  23. export type WebViewNavigation = $ReadOnly<{|
  24. ...WebViewNativeEvent,
  25. navigationType:
  26. | 'click'
  27. | 'formsubmit'
  28. | 'backforward'
  29. | 'reload'
  30. | 'formresubmit'
  31. | 'other',
  32. |}>;
  33. export type WebViewMessage = $ReadOnly<{|
  34. ...WebViewNativeEvent,
  35. data: string,
  36. |}>;
  37. export type WebViewError = $ReadOnly<{|
  38. ...WebViewNativeEvent,
  39. /**
  40. * `domain` is only used on iOS
  41. */
  42. domain: ?string,
  43. code: number,
  44. description: string,
  45. |}>;
  46. export type WebViewEvent = SyntheticEvent<WebViewNativeEvent>;
  47. export type WebViewNavigationEvent = SyntheticEvent<WebViewNavigation>;
  48. export type WebViewMessageEvent = SyntheticEvent<WebViewMessage>;
  49. export type WebViewErrorEvent = SyntheticEvent<WebViewError>;
  50. export type DataDetectorTypes =
  51. | 'phoneNumber'
  52. | 'link'
  53. | 'address'
  54. | 'calendarEvent'
  55. | 'trackingNumber'
  56. | 'flightNumber'
  57. | 'lookupSuggestion'
  58. | 'none'
  59. | 'all';
  60. export type WebViewSourceUri = $ReadOnly<{|
  61. /**
  62. * The URI to load in the `WebView`. Can be a local or remote file.
  63. */
  64. uri?: ?string,
  65. /**
  66. * The HTTP Method to use. Defaults to GET if not specified.
  67. * NOTE: On Android, only GET and POST are supported.
  68. */
  69. method?: string,
  70. /**
  71. * Additional HTTP headers to send with the request.
  72. * NOTE: On Android, this can only be used with GET requests.
  73. */
  74. headers?: Object,
  75. /**
  76. * The HTTP body to send with the request. This must be a valid
  77. * UTF-8 string, and will be sent exactly as specified, with no
  78. * additional encoding (e.g. URL-escaping or base64) applied.
  79. * NOTE: On Android, this can only be used with POST requests.
  80. */
  81. body?: string,
  82. |}>;
  83. export type WebViewSourceHtml = $ReadOnly<{|
  84. /**
  85. * A static HTML page to display in the WebView.
  86. */
  87. html?: ?string,
  88. /**
  89. * The base URL to be used for any relative links in the HTML.
  90. */
  91. baseUrl?: ?string,
  92. |}>;
  93. export type WebViewSource = WebViewSourceUri | WebViewSourceHtml;
  94. export type WebViewNativeConfig = $ReadOnly<{|
  95. /*
  96. * The native component used to render the WebView.
  97. */
  98. component?: ComponentType<WebViewSharedProps>,
  99. /*
  100. * Set props directly on the native component WebView. Enables custom props which the
  101. * original WebView doesn't pass through.
  102. */
  103. props?: ?Object,
  104. /*
  105. * Set the ViewManager to use for communication with the native side.
  106. * @platform ios
  107. */
  108. viewManager?: ?Object,
  109. |}>;
  110. export type WebViewSharedProps = $ReadOnly<{|
  111. ...ViewProps,
  112. /**
  113. * Deprecated. Use `source` instead.
  114. */
  115. url?: ?string,
  116. /**
  117. * Deprecated. Use `source` instead.
  118. */
  119. html?: ?string,
  120. /**
  121. * Loads static html or a uri (with optional headers) in the WebView.
  122. */
  123. source?: ?WebViewSource,
  124. /**
  125. * If true, use WKWebView instead of UIWebView.
  126. * @platform ios
  127. */
  128. useWebKit?: ?boolean,
  129. /**
  130. * Function that returns a view to show if there's an error.
  131. */
  132. renderError: (errorDomain: ?string, errorCode: number, errorDesc: string) => Element<any>, // view to show if there's an error
  133. /**
  134. * Function that returns a loading indicator.
  135. */
  136. renderLoading: () => Element<any>,
  137. /**
  138. * Function that is invoked when the `WebView` has finished loading.
  139. */
  140. onLoad: (event: WebViewNavigationEvent) => mixed,
  141. /**
  142. * Function that is invoked when the `WebView` load succeeds or fails.
  143. */
  144. onLoadEnd: (event: WebViewNavigationEvent | WebViewErrorEvent) => mixed,
  145. /**
  146. * Function that is invoked when the `WebView` starts loading.
  147. */
  148. onLoadStart: (event: WebViewNavigationEvent) => mixed,
  149. /**
  150. * Function that is invoked when the `WebView` load fails.
  151. */
  152. onError: (event: WebViewErrorEvent) => mixed,
  153. /**
  154. * Boolean value that determines whether the web view bounces
  155. * when it reaches the edge of the content. The default value is `true`.
  156. * @platform ios
  157. */
  158. bounces?: ?boolean,
  159. /**
  160. * A floating-point number that determines how quickly the scroll view
  161. * decelerates after the user lifts their finger. You may also use the
  162. * string shortcuts `"normal"` and `"fast"` which match the underlying iOS
  163. * settings for `UIScrollViewDecelerationRateNormal` and
  164. * `UIScrollViewDecelerationRateFast` respectively:
  165. *
  166. * - normal: 0.998
  167. * - fast: 0.99 (the default for iOS web view)
  168. * @platform ios
  169. */
  170. decelerationRate?: ?('fast' | 'normal' | number),
  171. /**
  172. * Boolean value that determines whether scrolling is enabled in the
  173. * `WebView`. The default value is `true`.
  174. * @platform ios
  175. */
  176. scrollEnabled?: ?boolean,
  177. /**
  178. * Controls whether to adjust the content inset for web views that are
  179. * placed behind a navigation bar, tab bar, or toolbar. The default value
  180. * is `true`.
  181. */
  182. automaticallyAdjustContentInsets?: ?boolean,
  183. /**
  184. * The amount by which the web view content is inset from the edges of
  185. * the scroll view. Defaults to {top: 0, left: 0, bottom: 0, right: 0}.
  186. * @platform ios
  187. */
  188. contentInset?: ?EdgeInsetsProp,
  189. /**
  190. * Function that is invoked when the `WebView` loading starts or ends.
  191. */
  192. onNavigationStateChange?: (event: WebViewNavigation) => mixed,
  193. /**
  194. * A function that is invoked when the webview calls `window.postMessage`.
  195. * Setting this property will inject a `postMessage` global into your
  196. * webview, but will still call pre-existing values of `postMessage`.
  197. *
  198. * `window.postMessage` accepts one argument, `data`, which will be
  199. * available on the event object, `event.nativeEvent.data`. `data`
  200. * must be a string.
  201. */
  202. onMessage?: (event: WebViewMessageEvent) => mixed,
  203. /**
  204. * Boolean value that forces the `WebView` to show the loading view
  205. * on the first load.
  206. */
  207. startInLoadingState?: ?boolean,
  208. /**
  209. * Determines the types of data converted to clickable URLs in the web view's content.
  210. * By default only phone numbers are detected.
  211. *
  212. * You can provide one type or an array of many types.
  213. *
  214. * Possible values for `dataDetectorTypes` are:
  215. *
  216. * - `'phoneNumber'`
  217. * - `'link'`
  218. * - `'address'`
  219. * - `'calendarEvent'`
  220. * - `'none'`
  221. * - `'all'`
  222. *
  223. * With the new WebKit implementation, we have three new values:
  224. * - `'trackingNumber'`,
  225. * - `'flightNumber'`,
  226. * - `'lookupSuggestion'`,
  227. *
  228. * @platform ios
  229. */
  230. dataDetectorTypes?:
  231. | ?DataDetectorTypes
  232. | $ReadOnlyArray<DataDetectorTypes>,
  233. /**
  234. * Boolean value to enable JavaScript in the `WebView`. Used on Android only
  235. * as JavaScript is enabled by default on iOS. The default value is `true`.
  236. * @platform android
  237. */
  238. javaScriptEnabled?: ?boolean,
  239. /**
  240. * Boolean value to enable third party cookies in the `WebView`. Used on
  241. * Android Lollipop and above only as third party cookies are enabled by
  242. * default on Android Kitkat and below and on iOS. The default value is `true`.
  243. * @platform android
  244. */
  245. thirdPartyCookiesEnabled?: ?boolean,
  246. /**
  247. * Boolean value to control whether DOM Storage is enabled. Used only in
  248. * Android.
  249. * @platform android
  250. */
  251. domStorageEnabled?: ?boolean,
  252. /**
  253. * Set this to provide JavaScript that will be injected into the web page
  254. * when the view loads.
  255. */
  256. injectedJavaScript?: ?string,
  257. /**
  258. * Sets the user-agent for the `WebView`.
  259. * @platform android
  260. */
  261. userAgent?: ?string,
  262. /**
  263. * Boolean that controls whether the web content is scaled to fit
  264. * the view and enables the user to change the scale. The default value
  265. * is `true`.
  266. *
  267. * On iOS, when `useWebKit=true`, this prop will not work.
  268. */
  269. scalesPageToFit?: ?boolean,
  270. /**
  271. * Function that allows custom handling of any web view requests. Return
  272. * `true` from the function to continue loading the request and `false`
  273. * to stop loading.
  274. * @platform ios
  275. */
  276. onShouldStartLoadWithRequest?: (event: WebViewEvent) => mixed,
  277. /**
  278. * Boolean that determines whether HTML5 videos play inline or use the
  279. * native full-screen controller. The default value is `false`.
  280. *
  281. * **NOTE** : In order for video to play inline, not only does this
  282. * property need to be set to `true`, but the video element in the HTML
  283. * document must also include the `webkit-playsinline` attribute.
  284. * @platform ios
  285. */
  286. allowsInlineMediaPlayback?: ?boolean,
  287. /**
  288. * Boolean that determines whether HTML5 audio and video requires the user
  289. * to tap them before they start playing. The default value is `true`.
  290. */
  291. mediaPlaybackRequiresUserAction?: ?boolean,
  292. /**
  293. * List of origin strings to allow being navigated to. The strings allow
  294. * wildcards and get matched against *just* the origin (not the full URL).
  295. * If the user taps to navigate to a new page but the new page is not in
  296. * this whitelist, we will open the URL in Safari.
  297. * The default whitelisted origins are "http://*" and "https://*".
  298. */
  299. originWhitelist?: $ReadOnlyArray<string>,
  300. /**
  301. * Specifies the mixed content mode. i.e WebView will allow a secure origin to load content from any other origin.
  302. *
  303. * Possible values for `mixedContentMode` are:
  304. *
  305. * - `'never'` (default) - WebView will not allow a secure origin to load content from an insecure origin.
  306. * - `'always'` - WebView will allow a secure origin to load content from any other origin, even if that origin is insecure.
  307. * - `'compatibility'` - WebView will attempt to be compatible with the approach of a modern web browser with regard to mixed content.
  308. * @platform android
  309. */
  310. mixedContentMode?: ?('never' | 'always' | 'compatibility'),
  311. /**
  312. * Override the native component used to render the WebView. Enables a custom native
  313. * WebView which uses the same JavaScript as the original WebView.
  314. */
  315. nativeConfig?: ?WebViewNativeConfig,
  316. style?: ViewStyleProp,
  317. children: Node,
  318. |}>;