如何隐藏手机浏览器的地址栏?

IT技术 javascript mobile-browser address-bar
2021-03-14 00:57:46

移动设备上的 Safari 和 Chrome 在页面加载时都包含一个可见的地址栏。body页面滚动时,这些浏览器会将地址栏滚动到屏幕外,为网站提供更多空间,如下图所示:

注意右图中缺少的地址栏

我的网站允许这样做时遇到了一些问题。我正在制作一个 Pokedex,其中包含很长的所有 Pokemon 列表。但是,按照我设置页面的方式,它不想将地址栏滚动到看不见的地方。

请注意,通过滚动地址栏仍然可见

我的 html 看起来像:

<body>
  <app> <!-- My Angular2 tag for the app, no special styles for this -->
    <nav>...</nav> <!-- The red nav bar and hamburger menu, default bootstrap -->
    <div class="fluid-container">...</div> <!-- The container for all pokemon entries -->
  </app>
</body>

如果我滚动到列表的绝对底部(即 721 个条目),则更多滚动会将地址栏移出屏幕顶部。如果我触摸导航栏并将其向上拖动,则地址栏会移出屏幕。这两种方法似乎都不直观。

我想我可以通过某种方式使用 javascript 滚动页面的主体来隐藏它,但到目前为止我尝试过的方法不起作用。当我这样做时,没有发生可见的滚动。

如何在页面加载后不久滚动页面以隐藏移动浏览器的地址栏?

编辑:我对此研究得越多,如果没有用户交互,它似乎就越不可能做到。如果我需要用户交互,用户在屏幕中央的触摸是否有可能在尝试滚动包含所有条目的 div 之前首先尝试滚动主体?如果这像我想的那样工作,那么它会在滑动列表之前先将地址栏滑开。这有点与默认浏览器行为相反,因此它可能不可能/容易/可靠,但我愿意尝试看看是否有人有任何想法。

6个回答

我知道这是旧的,但我必须在这里添加它..

虽然这不是一个完整的答案,但它是一个“除了”

如果您不使用 https,地址栏不会消失。

如果您使用 https 并且地址栏仍然不会隐藏,则您的网页中可能存在一些 https 错误(例如从非 https 位置提供的某些图像。)

希望这可以帮助..

我知道现在提出后续问题已经晚了 2 年,但是您是否有关于“如果您不使用 https 时地址栏不会消失”的陈述的参考资料?这听起来并不无道理,但我无法从 Goolge、Apple 或 Firefox 中找到有关此行为的任何信息。
2021-05-09 00:57:46
投反对票。不是你提到的答案。你可以留下它作为评论。此外,在最好的情况下,您会说为什么默认行为不起作用。问题是关于如何在默认行为之上做一些事情,即以编程方式隐藏 URL 栏。
2021-05-15 00:57:46
太好了,你将如何摆脱酒吧?
2021-05-17 00:57:46
将其固定到手机的主屏幕,然后单击固定的应用程序。
2021-05-17 00:57:46
@GeorgeHawkins 我也无法证明这是真的。
2021-05-17 00:57:46

看看这个 HTML5 摇滚帖子 - http://www.html5rocks.com/en/mobile/fullscreen/基本上你可以使用 JS,或者 Fullscreen API(更好的选项 IMO)或者在头部添加一些元数据来表明该页面是一个网络应用程序

@CoreyOgburn:出于安全原因,您不能强制您的网页以全屏模式显示。为此需要用户交互。
2021-05-11 00:57:46
是的,在我的 PC 上,我在控制台中得到了这个: Failed to execute 'requestFullScreen' on 'Element': API can only be initiated by a user gesture.
2021-05-12 00:57:46
我已经添加了元标记,现在当我将网站保存到我的桌面时,应用程序看起来/工作得很好,但我无法让全屏 API 在加载时工作。它可能需要用户交互才能做到这一点。
2021-05-20 00:57:46

这应该是隐藏地址栏所需的代码:

window.addEventListener("load",function() {
    setTimeout(function(){
        // This hides the address bar:
        window.scrollTo(0, 1);
    }, 0);
});

顺便说一下,图鉴也很好看!希望这可以帮助!

对我来说看起来不像是复制粘贴,更简单地说,这个技巧在 10 年代在网络上到处都是。是的,它曾经有效
2021-04-21 00:57:46
在 Android 7 上的 Chrome 上都没有。它会滚动,是的,但地址栏仍然可见
2021-05-02 00:57:46
该代码是从这里复制粘贴的:davidwalsh.name/hide-address-bar - 显然它在几年前有效
2021-05-11 00:57:46
这在运行最新 Android N 的 Nexus 6 上对我不起作用。我没有要测试的 iPhone。这可能是因为我使用的是 Angular2。该窗口可能会在所有获取 pokemon 数据的 AJAX 请求返回之前触发 load 事件。如果发生这种情况,文档高度可能不会被填充。我试过在那些 AJAX 请求之后调用它,但它仍然没有工作。
2021-05-12 00:57:46
> 注意:我是作为朋友告诉你的。它存在。这是一件事,但它是一个黑客。请不要使用它。— Paul 从这篇谷歌文章developer.google.com/web/fundamentals/native-hardware/...
2021-05-17 00:57:46

就我而言,问题出在 css 和 html 布局中。布局类似于 html-body-root-... htmlbodyoverflow: hiddenrootposition: fixed, height: 100vh

移动设备上的此布局浏览器选项卡不会隐藏。为了解决这个问题,我overflow: hiddenhtmlbody 中删除position: fixed,然后height: 100vhroot 中删除

投反对票。您刚刚提到为什么默认行为不适用于您的案例。它没有回答这个问题,即如何在默认行为之上做一些事情(即如何以编程方式最小化 url-bar)。
2021-05-10 00:57:46

存档隐藏在页面滚动中的浏览器地址栏的最简单方法是添加"display": "standalone",manifest.json文件。

如果我在主屏幕上添加网站,那么它就可以工作了。但是如果我不这样做,地址栏就不会隐藏在我的情况下。
2021-04-22 00:57:46
我希望我可以为那些不将网站添加到主屏幕的人这样做,但对于那些这样做的人来说,他们真的会美化他们的体验。我对此感到非常兴奋,我今天早上实施了它。
2021-04-25 00:57:46