【问题标题】:Detect how non-full screen WebApp was loaded (Home Screen v. Safari)检测非全屏 WebApp 的加载方式(Home Screen v. Safari)
【发布时间】:2012-01-16 12:45:35
【问题描述】:

很容易检测全屏 WebApp(即包含 <meta name="apple-mobile-web-app-capable" content="yes"> 的 WebApp)是如何启动的 - 只需检查 window.navigator.standalone

是否可以对非全屏 WebApp 执行相同操作?

我想向用户显示一个“为该网页添加书签”气泡(例如在 http://youtube.com 上),但如果网页是从主屏幕启动的,我不想显示它。

我很确定这是可能的,因为 YouTube 是一个非全屏 Web 应用程序,它不会显示“给我添加书签!”从主屏幕启动时会出现气泡

【问题讨论】:

    标签: iphone web-applications mobile mobile-safari


    【解决方案1】:

    我可能在您的问题中遗漏了一些内容,但是:window.navigator.standalone 正在告诉应用程序是否当前处于全屏模式(如果浏览器完全支持此属性)。

    这意味着:如果该属性存在且为 false,则您可能需要提供书签按钮。如果它在那里并且是真的,不要显示它(应用程序已经从主屏幕运行)。如果缺少该属性,请不要显示书签按钮,因为用户代理不支持它。

    例如,尝试访问 www.luscarpa.com。使用 Safari,然后将其添加到您的主屏幕并注意区别。

    它还有关于全屏模式的信息(这是我了解到的):http://www.luscarpa.com/development/make-your-website-an-iphone-web-application/

    【讨论】:

    • 我无法将 <meta name="apple-mobile-web-app-capable" content="yes"> 添加到我的网络应用程序 b/c 它需要 Safari 控件才能工作(特别是我不想实现自己的后退/前进按钮栏)因为我m 不使用这个元标记,window.navigator.standalone 永远不会是真的。我想知道是否有另一种方法来确定我的应用程序是否是通过主屏幕书签启动的
    • 如果元标记丢失,您是否真的尝试过阅读 window.navigator.standalone?从文档中我看不出它需要元标记。
    • 更基本的方法是使用“”。这仅在从主屏幕启动时触发。将 startup.png 替换为一个不可缓存的动态页面,该页面会吐出图像但也存储请求的会话 ID。在您的第一个“真实”页面检查,如果会话 ID 在调用开始图像时被保存。如果是,您必须处于全屏模式。只是一个想法。没试过。
    • 还有一个想法:元标记仅对第一页有效。因此,让您的起始页具有元标记并检测独立属性。然后将用户重定向到“第二个”起始页,并传递一个参数是否第一页是从主屏幕启动的。在第二页不要使用元标记。如果您的参数未设置,请询问用户是否要将您的应用添加到主屏幕。
    • @Krumulur – <link rel="apple-touch-startup-image" href="/startup.png"> 标签不会做任何事情,除非还有 <meta name="apple-mobile-web-app-capable" content="yes"> 标签
    【解决方案2】:

    Horace,您可以研究 Google 的注释 javascript 源代码,他们可能在他们的 YouTube 气泡检测方案中使用了这些代码,位于 http://code.google.com/p/mobile-bookmark-bubble

    【讨论】:

      【解决方案3】:
      if ('standalone' in navigator && !navigator.standalone && (/iphone|ipod|ipad/gi).test(navigator.platform) && (/Safari/i).test(navigator.appVersion)) {
              document.write('<link rel="stylesheet" href="add2home.css">');
              document.write('<script type="application/javascript" src="add2home.js"><\/s' + 'cript>');
      }
      

      这是来自cubiq.org/add-to-home-screen 的一个小脚本似乎可以完成工作

      当然,如果您不使用 add2home 脚本,那么您应该更改文件名。

      【讨论】:

        【解决方案4】:

        查看在Safari中打开的youtube网站url,在url的最后一部分,有一个home/?bmb=1,我认为bmb=1实际上是有区别的,当你为这个页面添加书签时, url 将包含这个 bmb 变量,然后当你按下主页按钮时,在服务器端你可以检测到它并知道它来自主页按钮。

        【讨论】:

        • 是的,我认为这是正确的方法。 Youtube.com 在您添加书签之前添加了一个哈希参数,如果您使用该哈希参数加载网站,它就知道您是从书签启动的。
        • 哦,好吧,如果您看一下我回答的第四条评论,那正是我写的。 :-)
        猜你喜欢
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        • 2012-09-20
        • 2013-05-21
        • 1970-01-01
        • 2014-01-07
        • 2013-09-30
        • 1970-01-01
        相关资源
        最近更新 更多