1
0

web-view.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { forwardRef } from "react";
  2. import { Platform, StyleSheet, View } from "react-native";
  3. import { WebView } from "react-native-webview";
  4. import { UNA_URL } from "../constants/settings";
  5. import injectedJS from "../injected/webview-injected"; // string, bundled at compile time
  6. import { WebViewHandlers } from "../types/webview-handlers-type";
  7. import { handleWebViewMessage } from "../utils/webview-message-handler";
  8. import { renderWebViewError } from "./web-view-error-screen";
  9. import { shouldStartLoadWithRequest } from "./web-view-load-with-request";
  10. const WebViewContainer = forwardRef<WebView, WebViewHandlers>((handlers, ref) => {
  11. return (
  12. <View style={styles.container}>
  13. <WebView
  14. ref={ref}
  15. source={{ uri: UNA_URL }}
  16. userAgent={"UNAMobileApp/Mobile (" + Platform.OS + ")"}
  17. injectedJavaScript={injectedJS}
  18. useWebKit={true}
  19. allowFileAccess={true}
  20. startInLoadingState={false}
  21. setSupportMultipleWindows={false}
  22. hideKeyboardAccessoryView={true}
  23. allowsLinkPreview={true}
  24. javaScriptEnabled
  25. geolocationEnabled
  26. domStorageEnabled
  27. pullToRefreshEnabled // iOS only
  28. webviewDebuggingEnabled
  29. onNavigationStateChange={handlers.onStateChange}
  30. onLoadProgress={(e: any) => handlers.onLoadProgress(e.nativeEvent.progress)}
  31. onMessage={handleWebViewMessage(handlers)}
  32. onShouldStartLoadWithRequest={shouldStartLoadWithRequest}
  33. renderError={(errorDomain, errorCode, errorDesc) =>
  34. renderWebViewError(handlers, errorDomain, errorCode, errorDesc)
  35. }
  36. />
  37. </View>
  38. );
  39. }
  40. );
  41. export default WebViewContainer;
  42. const styles = StyleSheet.create({
  43. container: { flex: 1 },
  44. });