Skip to content

Commit b36b96e

Browse files
committed
feat: 优化 Progressive Web App (PWA) 体验并调整上下文菜单行为
- 在非 Tauri 环境下启用 PWA 模式时禁用默认上下文菜单和拖放功能 - 重构 makeDisableDefaultContextMenuListener 函数,使用默认行为规则 - 更新 manifest.json 以优先使用 standalone 显示模式
1 parent f7d5d83 commit b36b96e

3 files changed

Lines changed: 27 additions & 16 deletions

File tree

src/App.tsx

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { alpha, GlobalStyles, ThemeProvider } from '@suid/material';
1+
import { alpha, GlobalStyles, ThemeProvider, useMediaQuery } from '@suid/material';
2+
import { createEffect } from 'solid-js';
23
import { makeDisableDefaultContextMenuListener } from './hooks/makeDisableDefaultContextMenuListener';
34
import { makeDisableDefaultDropListener } from './hooks/makeDisableDefaultDropListener';
45
import { makeDisableDefaultF5Listener } from './hooks/makeDisableDefaultF5Listener';
@@ -10,20 +11,15 @@ export function App() {
1011
if (IS_TAURI) {
1112
makeDisableDefaultDropListener();
1213
makeDisableDefaultF5Listener();
13-
makeDisableDefaultContextMenuListener((target) => {
14-
if (
15-
target instanceof HTMLInputElement &&
16-
(target.type === 'email' ||
17-
target.type === 'text' ||
18-
target.type === 'password' ||
19-
target.type === 'number' ||
20-
target.type === 'tel' ||
21-
target.type === 'url' ||
22-
target.type === 'search')
23-
) {
24-
return false;
14+
makeDisableDefaultContextMenuListener();
15+
} else {
16+
const standaloneMode = useMediaQuery('(display-mode: standalone)');
17+
18+
createEffect(() => {
19+
if (standaloneMode()) {
20+
makeDisableDefaultDropListener();
21+
makeDisableDefaultContextMenuListener();
2522
}
26-
return true;
2723
});
2824
}
2925

src/hooks/makeDisableDefaultContextMenuListener.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
import { makeEventListener } from '@solid-primitives/event-listener';
22

3-
export function makeDisableDefaultContextMenuListener(when?: (target: EventTarget) => boolean) {
3+
const DEFAULT_WHEN = (target: EventTarget): boolean => {
4+
if (
5+
target instanceof HTMLInputElement &&
6+
(target.type === 'email' ||
7+
target.type === 'text' ||
8+
target.type === 'password' ||
9+
target.type === 'number' ||
10+
target.type === 'tel' ||
11+
target.type === 'url' ||
12+
target.type === 'search')
13+
) {
14+
return false;
15+
}
16+
return true;
17+
};
18+
export function makeDisableDefaultContextMenuListener(when: (target: EventTarget) => boolean = DEFAULT_WHEN) {
419
makeEventListener(
520
document.documentElement,
621
'contextmenu',

src/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"start_url": "<%= process.env.BASE_URL %>",
66
"scope": "<%= process.env.BASE_URL %>",
77
"display": "standalone",
8-
"display_override": ["minimal-ui"],
8+
"display_override": ["standalone", "minimal-ui"],
99
"categories": ["productivity", "finance"],
1010
"icons": [
1111
{

0 commit comments

Comments
 (0)