我正在开发一个单页Web应用程序,该应用程序通常会在移动设备上使用。它的功能之一是地图模式,它会临时接管整个浏览器窗口。距离比例尺和一些控件连接到地图的四个角。这是地图的一些屏幕截图,因此您可以知道我在说什么:
该图是作为一个<div>
与position: fixed
所有四个坐标为零; 我还将在地图可见时临时将设置为<body>
,overflow: hidden
以处理基础应用程序显示远离原点滚动的情况。这足以使地图完全按照我在桌面浏览器上的方式工作。移动浏览器还要求我给meta视口标签加上类似的东西"width=device-width,user-scalable=no"
,以使窗口的可见区域与视口完全对应。
几年前,当我最初编写此应用程序时,所有这些方法的运行都很漂亮,但是iOS Safari沿途停止了任何涉及缩放的元视口选项-显然有太多站点在错误地使用了标签,导致文本小得难以理解,但不可缩放。当前,如果在此浏览器上启用地图,则可能会获得稍微放大的视图,该视图会切断右侧和底部的那些按钮-您对此无能为力,因为所有触摸都被解释为地图的缩放/平移手势,而不是浏览器滚动。没有通过这些按钮访问的功能,地图就不是非常有用-没有右上角的按钮,您甚至无法关闭地图。唯一的方法是重新加载页面,这可能会导致未保存的数据丢失。
我肯定会添加history.pushState
/ 的使用,onpopstate
以便地图覆盖的行为就像单独的页面一样。您可以使用浏览器的“后退”按钮退出地图模式-但这不能解决由于缺少按钮而导致的其他功能损失。
我已经考虑过使用.requestFullscreen()
来实现地图叠加层,但是并非所有地方都支持该应用程序可用。特别是,它显然根本无法在iPhone上使用,在iPad上,您会看到一个状态栏和一个巨大的“ X”按钮,该按钮覆盖您的内容-我的距离刻度可能不再可读。无论如何,这并不是我真正想要的语义-我需要整个窗口,而不是整个屏幕。
如何在现代浏览器上显示全窗口显示?我可以在该主题上找到的所有信息都涉及使用meta视口标记,但是正如我提到的那样,它不再起作用。