我以前见过这个“解决方案”,但有一个重大缺陷!
这就是我想要实现的目标;
我有一个网络应用程序,要求用户在可以使用之前登录。出于各种原因,我不希望它只在常规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;
}
答案 0 :(得分:7)
您是否可以更改逻辑,以便登录页面是默认设置,但如果用户在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>
答案 1 :(得分:2)
您可以尝试“添加到主屏幕”中使用的hash-trick
这里是示例here
基本上它会检查URL的末尾是否有哈希值,如果确实存在,则表示它已添加到主屏幕,如果没有,那么它可以运行脚本然后将哈希添加到网址。因此,当他们将链接添加到主屏幕时,下次他们打开Web应用程序时,它将在屏幕上显示哈希值。它是一种混乱的方式,但它的工作原理。