1

嗨,我遇到了浏览器检测和 cookie 的问题。我希望通过“不再显示”复选框向访问我网站的 iPhone 或 Android 用户显示消息。我不能使用 PHP 或 Jquery,所以我必须坚持使用 strait javascript。我需要以下事件发生:

如果 Android
并且
如果 Cookie 尚未设置,则显示消息
,否则不执行任何操作

我是编码新手,所以任何帮助将不胜感激。

4

2 回答 2

0

您可以使用 cookie,但网络存储更易于使用。较旧的浏览器(IE7 和opera mini)可能不支持网络存储,但iOS safari 和Android 浏览器都支持。

关于浏览器检测(您应该使用特征检测),该navigator对象存储了几个有用的属性,即userAgentplatformappName也可用,但似乎没有用(Chrome 23 报告“Netscape”)。

从用户代理中推断出很多东西是一件棘手的事情,但是

  • Android 默认浏览器Android在其用户代理中报告“”(参考
  • 对于 iOS,在用户代理中检测“ iPad”和“ ”似乎就足够了(参考iPhone

尝试:

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);
}
于 2012-12-28T16:28:13.243 回答
0

所以你有两件事要完成:

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

于 2012-12-28T16:32:51.867 回答