我正在尝试围绕修改后的 VNC 查看器小程序(VNC = 远程显示协议)实现一个包装器,以提供增强的用户体验(使用 javascript),但在处理旋转时遇到了问题。
小程序的宽度/高度是固定的 (1) - 所以当用户旋转设备时,小程序会覆盖屏幕或调整大小:
+------------+ +-------+ +-------+
|............| |.......|... |.......|
|. X.| |. | X. or |. x.|
|. .| > |. | . |.......|
|............| |.......|... | |
+------------+ | | | |
| | | |
+-------+ :( +-------+ :(
但我想要....
+------------+ +-------+
|............| |.......|
|. X.| |. .|
|. .| > |. .|
|............| |. .|
+------------+ |. X.|
|.......|
+-------+ :)
虽然我可以从javascript中屏幕尺寸的变化中检测到自动旋转,并且,如果它是用 Java 编写的,我可以抑制自动旋转,但这些都没有达到我想要的结果:具体来说,
- 旋转设备时显示器的方向不会改变
- 我的 javascript 会检测到该设备已被旋转并重新定位小程序的内容(通过发送 OOB 消息以在 vncserver 上运行 xrandr)。
我并不完全反对将旋转检测实现为暴露给javascript的单独小程序/通过webview实现页面,但不希望这样做。
是否可以在 html 应用程序清单文件中锁定方向?
锁定方向时是否可以使用javascript检测旋转?
还有其他方法可以解决这个问题吗?
1 - 这是底层协议的限制,我已经在对 Java 小程序进行更改,我也不想重写服务器!
更新
我知道大多数版本的 VNC(包括 noVNC)都存在 xrandr 问题。
如果有人能告诉我如何抑制浏览器页面的自动重新定向(不使用带有 web 视图的小程序),这至少给了我部分答案。