Skip to content

Commit cf3c0b2

Browse files
authored
Prevent settings menu scroll on iOS proxy iframe from shifting entire UI (blakeblackshear#17024)
1 parent 74ca009 commit cf3c0b2

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

web/src/pages/Settings.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { Drawer, DrawerContent, DrawerTrigger } from "@/components/ui/drawer";
2020
import { Button } from "@/components/ui/button";
2121
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2222
import useOptimisticState from "@/hooks/use-optimistic-state";
23-
import { isMobile } from "react-device-detect";
23+
import { isMobile, isMobileSafari } from "react-device-detect";
2424
import { FaVideo } from "react-icons/fa";
2525
import { CameraConfig, FrigateConfig } from "@/types/frigateConfig";
2626
import useSWR from "swr";
@@ -40,6 +40,8 @@ import UiSettingsView from "@/views/settings/UiSettingsView";
4040
import { useSearchEffect } from "@/hooks/use-overlay-state";
4141
import { useSearchParams } from "react-router-dom";
4242
import { useInitialCameraState } from "@/api/ws";
43+
import { isInIframe } from "@/utils/isIFrame";
44+
import { isPWA } from "@/utils/isPWA";
4345
import { useIsAdmin } from "@/hooks/use-is-admin";
4446

4547
const allSettingsViews = [
@@ -150,7 +152,7 @@ export default function Settings() {
150152
);
151153
if (element instanceof HTMLElement) {
152154
scrollIntoView(element, {
153-
behavior: "smooth",
155+
behavior: isMobileSafari && !isPWA && isInIframe ? "auto" : "smooth",
154156
inline: "start",
155157
});
156158
}

web/src/utils/isIFrame.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export const isInIframe = (() => {
2+
try {
3+
return window.self !== window.top;
4+
} catch (e) {
5+
// If we get a security error, we're definitely in an iframe
6+
return true;
7+
}
8+
})();

0 commit comments

Comments
 (0)