【问题标题】:Stop iphone safari address bar from showing when changing pages更改页面时停止显示 iphone safari 地址栏
【发布时间】:2012-06-21 00:06:26
【问题描述】:

我有一个移动网站,当用户在移动 Safari 中点击我网站中的链接时,我想停止弹出地址栏,例如

开启: example.org/foo

点击一个链接,转到: example.org/bar

注意:URL 地址是使用历史推送状态 API 更新的,因此不会加载新页面,只会更新 URL。

目前地址栏会随着页面的变化而弹出。在移动 Twitter 应用程序中,当您单击并更改页面时,地址栏不会弹出,即使他们也在更新 URL。

在页面更改期间如何阻止地址显示的任何想法(不是在页面加载后,这是我找到的所有其他链接所指的)。

谢谢。

【问题讨论】:

    标签: iphone css mobile safari


    【解决方案1】:

    虽然这不能解决您的问题,但我可以解释移动 Twitter 是如何实现这一点的,因为我必须针对我构建的响应式网站进行研究。

    移动 Twitter 根本不使用链接。相反,它们将事件绑定到其他元素(在本例中为 <li> 元素),这些元素会更改显示内容并使用 HTML5 push state 更新 URL 栏。

    因此,我能看到的唯一解决方案是尽可能为移动设备构建一个单独的版本。


    附:此外,在特定于移动设备的网站上检查代码的最简单方法是使用 Safari 并在“开发”菜单下更改用户代理。

    【讨论】:

  • 【解决方案2】:

    此链接准确显示了您要查找的内容:http://jmperezperez.com/prevent-iphone-navigation-bar-ajax-link-click/

    the demo (code below) 的唯一问题是它为每个链接添加了一个哈希 #,从而破坏了导航。如果有人知道解决方法,我将不胜感激。

    HTML:

    <ul>
      <li>
          <a class="prevent" href="/">
               This link is ignored. However, it shows the bar
          </a>
      </li>
      <li>
          <a class="facebook" href="/blog">
               This link is ignored. It does not show the bar, 
               and modifies the hash tag.
          </a>
      </li>
    </ul>
    

    JS:

    //hide bar on page load
    setTimeout(function () {  window.scrollTo(0, 1);}, 500);
    
    //attach event touchend
        document.addEventListener('touchend',
            function(e) {
            var target = e.target;
            while(target.nodeName !== 'A' && target.nodeName !== 'BODY') {
            target = target.parentNode;
        }
        if (target.nodeName === 'A' &&
            target.className === 'facebook') {
                target.href = '#!' + target.getAttribute('href');
            }
        },
            false
        );
    
        //attach event click
        document.addEventListener('click',
            function(e) {
            if (e.target.nodeName === 'A') {
                if (e.target.className === 'prevent') {
                    e.preventDefault();
                } else if (e.target.className === 'facebook') {
                          var href = e.target.getAttribute('href');
                    if (href.indexOf('#!') === 0) {
                        var newHref = href.substr(2);
                        e.target.href = newHref;
                        location.hash = newHref;
                        e.preventDefault();
                    }
                }                       
            }
        },
            false
    ); 
    

    【讨论】:

    • 这是最好的解决方案。 Juts 用哈希替换您的链接 href 将阻止 Safari 在您单击它时显示地址栏。在您的 Javascript 中执行此操作将防止您的导航因非 javascript 用户而中断。
    【解决方案3】:

    看到您仅更新 url 的评论导航到新页面,您应该能够摆脱这个 JS 捎带链接点击/历史更新处理程序:

    window.scrollTo(0, 1);
    

    如果 URL 更新有效地代表一个全新的页面(而不是将新的分页内容加载到表格等中),这将是合适的

    The javascript approach 与设备无关,不依赖最终用户的任何进一步操作(与 meta tag solution 不同)

    【讨论】:

      【解决方案4】:

      尝试在您的网址末尾添加井号 (#)。我遇到了相反的问题,即页面加载后地址栏向上滑动。当我尝试计算我得到的数字低于预期的客户端高度时,这导致了一个问题。该数字恰好是地址栏高度的大小。我花了几个小时才弄清楚我偶然通过的网址最后有一个#。当我删除它时,地址栏保持在原位而不是向上滑动。 所以尝试在你的 url 末尾添加一个 # 看看会发生什么。

      如果您想保持地址栏可见。 这也意味着您不应该将页面锚点用于页面导航。 相反,您将不得不使用 onclick 事件和 scrollTo(0,height)

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签