【问题标题】:iOS Web app - show content only if added to home screen?iOS Web 应用程序 - 仅在添加到主屏幕时才显示内容?
【发布时间】:2013-03-04 16:00:33
【问题描述】:

我以前见过一个“解决方案”,但有一个重大缺陷!

这就是我想要实现的目标;

我有一个需要用户登录才能使用的网络应用程序。出于多种原因,我不希望它在常规 Safari 中使用,只能通过主屏幕使用(从美学上讲,它只有在全屏时才真正“有效”)。

因此,当用户浏览该网站时,它应该检测它是通过主屏幕(在这种情况下显示登录页面)还是常规 Safari(在这种情况下会显示一个启动屏幕,邀请查看者将其添加到他们的主屏幕)。

我可以成功检测到它是通过主屏幕打开还是现在(使用 window.navigator.standalone)打开,但是我遇到的所有解决方案都涉及将用户重定向到另一个页面,如果它不是通过主屏幕打开的.这样做的问题是用户将书签(或添加到主屏幕)错误的页面。据我所知,无法指定要添加到主屏幕的其他页面。

我尝试了以下方法,但似乎不起作用;

/* Added to login page head */
$(document).ready()
        if (window.navigator.userAgent.indexOf('iPhone') != -1) {
            if (window.navigator.standalone == true) {
                initialize();
            }else{
                $('.container').load('/install.cfm')
            }
        }else{
            $('.container').load('/install.cfm')
        }

编辑:根据@scunliffe 的评论,我现在尝试了以下方法,这也不起作用(在脚本执行之前加载了jQuery,所以这不应该是问题);

if (window.navigator.userAgent.indexOf('iPhone') != -1) {
            if (window.navigator.standalone == true) {
                $('#logindiv').show;
            }else{
                $('#installdiv').show;
            }
        }else{
            $('#installdiv').show;
        }

【问题讨论】:

    标签: javascript ios web-applications


    【解决方案1】:

    如果用户在 iphone/iOS 设备上,您能否更改您的逻辑以使登录页面成为默认页面?如果独立运行,他们会收到一条消息?

    $(document).ready(function(){
        if(navigator.userAgent.indexOf('iPhone') != -1){//test for other iOS devices?
            if(window.navigator.standalone == true){
                //do stuff!
                initialize();
            } else {
                //show message telling user to add to their home screen...
            }
        } else {
            //show message that this must be run on device X/Y/Z...
        }
    });
    

    更新:

    根据您更新的示例,您只需修改代码以将 show/hide 作为方法调用。

    $(document).ready(function(){
      if(window.navigator.userAgent.indexOf('iPhone') != -1){
        if(window.navigator.standalone == true){
          $('#logindiv').show();
        } else {
            $('#installdiv').show();
        }
      } else {
        $('#installdiv').show();
      }
    });
    

    <div id="logindiv">
      ...stuff to login here...
    </div>
    <div id="installdiv">
      ...note to install here...
    </div>
    

    【讨论】:

    • 登录页面 is 默认(纯粹是因为如果用户未登录它会显示 - 通过阻止它在 Safari 中使用,用户应该只能通过主屏幕访问它来登录)。我的问题是让页面显示适当 - 即当用户在常规 safari 中查看时,我想显示不同的内容,并且在通过主屏幕时只显示登录页面。我以为我可以结合使用上述代码和 jQuery .load 来实现这一点,但它似乎不起作用。
    • 只是为了澄清一下,我建议您只有 1 个物理页面...它在适用​​时显示登录内容...但如果不是从主屏幕启动或不在iOS 设备。 (但都是同一个物理页面)
    • 啊啊啊,我没想到会那样做!我会试一试。
    • 好的,所以我已经尝试过这种方式(请原谅我可怜的 JS - 仍然找不到我的脚!)。设置 2 个带有 display:none 的 div,一个带有登录表单,另一个是“splash”,提示用户添加到主屏幕。检测脚本应该显示相关的 div,但没有。 if (window.navigator.userAgent.indexOf('iPhone') != -1) { if (window.navigator.standalone == true) { $('#logindiv').show; }else{ $('#installdiv').show; } }else{ $('#installdiv').show; }
    • 谢谢!我错过了 $(document).ready ... newbie 错误!感谢您的帮助,非常感谢!
    【解决方案2】:

    您可以尝试“添加到主屏幕”中使用的hash-trick 这是示例here

    基本上,它会检查 URL 末尾是否有哈希,如果有,则表示它已添加到主屏幕,如果没有,则它可以运行脚本,然后将哈希添加到网址。因此,当他们将链接添加到主屏幕时,下次他们打开 Web 应用程序时,屏幕上就会显示哈希值。这是一种混乱的做法,但它确实有效。

    【讨论】:

    • 可能是唯一可用的选项?感谢分享。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2013-02-14
    • 2012-10-29
    • 2018-05-22
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多