嗨,我遇到了浏览器检测和 cookie 的问题。我希望通过“不再显示”复选框向访问我网站的 iPhone 或 Android 用户显示消息。我不能使用 PHP 或 Jquery,所以我必须坚持使用 strait javascript。我需要以下事件发生:
如果 Android
并且
如果 Cookie 尚未设置,则显示消息
,否则不执行任何操作
我是编码新手,所以任何帮助将不胜感激。
嗨,我遇到了浏览器检测和 cookie 的问题。我希望通过“不再显示”复选框向访问我网站的 iPhone 或 Android 用户显示消息。我不能使用 PHP 或 Jquery,所以我必须坚持使用 strait javascript。我需要以下事件发生:
如果 Android
并且
如果 Cookie 尚未设置,则显示消息
,否则不执行任何操作
我是编码新手,所以任何帮助将不胜感激。
您可以使用 cookie,但网络存储更易于使用。较旧的浏览器(IE7 和opera mini)可能不支持网络存储,但iOS safari 和Android 浏览器都支持。
关于浏览器检测(您应该使用特征检测),该navigator
对象存储了几个有用的属性,即userAgent
和platform
。appName
也可用,但似乎没有用(Chrome 23 报告“Netscape”)。
从用户代理中推断出很多东西是一件棘手的事情,但是
尝试:
if(window.localStorage
&& !localStorage.getItem("dialogShown")
&& /Android|iPad|iPhone/.test(navigator.userAgent)
){
// show the dialog (unhide an element)
}
当对话框被关闭时:
var checkbox /* = document.getElementById(...) */;
if(checkbox.checked){
localStorage.setItem("dialogShown",true);
}
所以你有两件事要完成:
1st - 浏览器检测
通过 javascript 进行浏览器检测是一件棘手的事情,我建议您看看这篇文章以了解它。
您必须捕获 Android 和 iPhone 浏览器,并且它们的用户代理中都有“mobile”字符串(就像所有体面的移动浏览器一样),因此您可以使用以下功能来做到这一点:
function isMobile() {
return (/mobile/i).test(window.navigator.userAgent);
}
在移动浏览器中,此函数将返回 true。
看看这个问题的替代方法。
第二 - Cookie 访问
cookie“API”是一个更糟糕的接口。要处理它,您必须将 key=value 数据写入 document.cookie(阅读MDN 的文档)。
因此,如果您想在 cookie 上存储用户偏好,您可以执行以下操作:
document.cookie = "skip_message=1"
正如我所说,cookie API 接口有时可能非常棘手,因此您应该使用 3rd 方库来读取写入 cookie。MDN 文档中的小框架是一个很好的框架。
您的目标浏览器具有更高级的功能,因此如果您不需要支持旧版浏览器,我建议您使用 localStorage