所以,我有一个我正在创建的变量,它与表单中的POST数据一起传递。由于某种类型的代码怪癖,任何现代浏览器都会创建两次变量,并且如果将变量的值设置为cookie,则会为同一事件触发两个不同的唯一ID。如果现代浏览器将值设置为localstorage,则只生成一个唯一ID,一切正常。
但是,Mobile Safari不会对localstorage进行处理(因为Apple将localstorage的目录移动到随机清空的目录),并且IE8无法将值设置为localstorage。为了绕过这些问题,这两个浏览器应该设置一个cookie,它可以按预期工作,并为事件生成一个唯一的标识符。
我不能只使用特征检测,因为IE8在技术上支持localstorage,但是当页面的文档类型不是HTML5时。 Mobile Safari还支持localstorage,但与其他现代浏览器的处理方式不同。
我可以说这两项检查工作是将Chrome识别为“其他任何内容”,但唯一标识符显示为未定义。
以下代码阻止变量设置并存储在localstorage中会出现什么问题?
$(document).ready(function() {
if ($.browser.msie && parseInt($.browser.version, 10) === 8) {
var uuid = $.cookie("uuid");
if(typeof uuid === 'undefined'){
var uuid = guid();
document.cookie='uuid='+uuid;
var iam = "ie8";
alert(iam);
}
} else {
if (navigator.userAgent.match(/(iPad|iPhone|iPod touch);.*CPU.*OS 7_\d/i)){
var uuid = $.cookie("uuid");
if(typeof uuid === 'undefined'){
var uuid = guid();
document.cookie='uuid='+uuid;
var iam = "safari mobile";
alert(iam);
} else {
if (localStorage.getItem("uuid") === null) {
var uuid = guid();
localStorage.setItem("uuid", uuid);
var iam = "anything else";
alert(iam);
}
}
}
}
});
注意事项: