问题:iOS WebKit 永远不派发 contextmenu(WebKit bug 213953),长按图片只弹系统 callout,导致"我的图片"页的自定义菜单在 iPhone/iPad 上完全不可用 (resources/js/context-js.js 的菜单只挂在 contextmenu 上)。 改动: - overlay/context-js.js:纯增量补丁。新增仅 iOS 生效的长按分支(touchstart+500ms, 移动 >10px / 多指 / 短按都取消),复用原本的开菜单逻辑(beforeOpen/afterOpen 照旧); 注入 -webkit-touch-callout:none 压掉原生菜单(只作用于本库绑定的元素范围); 抬手吞掉 iOS 补发的 click,避免长按后误开图片预览;长按与 contextmenu 之间 700ms 去重。 判定只在 iPad/iPhone/iPod(含 iPadOS 伪装的 MacIntel+maxTouchPoints>1)为真, Android / Windows / 真 Mac(含 M 系列,maxTouchPoints=0)一行新代码都不执行。 - overlay/images.blade.php:只给脚本加 ?v=ios-longpress,绕开 Safari 的启发式缓存 - Dockerfile:源码钉死 911275c(= 2024-04-29 那版线上镜像使用的 master HEAD); 基础镜像显式 bookworm;install-php-extensions 钉版本;构建期两处 md5 自证 - .github/workflows/build-image.yaml:替换上游的定时构建,改推 GHCR + 构建后真机自证 (核 md5、记录 PHP/扩展/Debian、真起容器 curl 安装页) - test/:node + jsdom 行为测试(23 项,覆盖 iOS/iPad/Mac/Android/Windows 五类场景) - README:补丁原理、跨平台隔离说明、升级/回滚步骤(含"换镜像不会更新已有卷代码"这个坑) 致谢与许可保留上游全部署名与 LICENSE(AGPL-3.0)。
13 lines
234 B
JSON
13 lines
234 B
JSON
{
|
|
"name": "lsky-pro-docker-tests",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"test": "node longpress.test.mjs ../overlay/context-js.js"
|
|
},
|
|
"devDependencies": {
|
|
"jquery": "3.7.1",
|
|
"jsdom": "^30.1.1"
|
|
}
|
|
}
|