18

我想知道是否可以检测 iOS 用户是否正在使用 webapp,或者只是使用 safari 浏览器以正常方式访问。

我想要实现的原因是,在 iOS webapp 上,当用户单击链接时,他将被重定向到 Safari 浏览器。所以我使用以下解决方法让他留在 webapp 中(防止切换到 safari 浏览器)。

$( document ).on("click",".nav ul li a",
        function( event ){

        // Stop the default behavior of the browser, which
        // is to change the URL of the page.
        event.preventDefault();

        // Manually change the location of the page to stay in
        // "Standalone" mode and change the URL at the same time.
        location.href = $( event.target ).attr( "href" );

        }
    );

但我希望这种解决方法仅在用户使用 webapp 时发生,我希望它对 webapp 用户是有条件的。所以不在默认的 safari 浏览器上。

4

2 回答 2

29

您必须使用一些 javascript 来检测这一点:

<script>
if (("standalone" in window.navigator) &&       // Check if "standalone" property exists
    window.navigator.standalone){               // Test if using standalone navigator

    // Web page is loaded via app mode (full-screen mode)
    // (window.navigator.standalone is TRUE if user accesses website via App Mode)

} else {

    // Web page is loaded via standard Safari mode
    // (window.navigator.standalone is FALSE if user accesses website in standard safari)
}
</script>
</head> 

现在需要进行额外检查"standalone" in window.navigator,因为某些浏览器没有该standalone属性,并且您不希望您的代码在这些浏览器中崩溃。

于 2013-08-01T09:19:00.847 回答
12

iOS 和 Chrome WebApp 的行为不同,这就是我关注的原因:

isInWebAppiOS = (window.navigator.standalone == true);
isInWebAppChrome = (window.matchMedia('(display-mode: standalone)').matches);
于 2016-12-02T12:30:06.900 回答