繁体   English   中英

如果浏览器是IE8或Mobile Safari,则尝试编写Cookie;如果使用其他浏览器,则尝试编写本地存储-使用Javascript

[英]Trying to write cookie if browser is IE8 or Mobile Safari, and localstorage if any other browser - using Javascript

因此,我有一个正在创建的变量,该变量与来自表单的POST数据一起传递。 由于某种形式的代码怪癖,如果将变量的值设置为cookie,则任何现代浏览器都会两次创建该变量,并为同一事件触发两个不同的唯一ID。 如果现代浏览器改为将值设置为localstorage,则仅生成一个唯一的ID,并且一切正常。

但是,Mobile Safari不会像对待本地存储那样对待本地存储(因为Apple将本地存储目录移到了随机清空的目录中),并且IE8无法将值设置为本地存储。 为了绕过这些问题,这两个浏览器应改为设置一个cookie,该cookie可以按预期工作并为该事件生成一个唯一的标识符。

我不能仅使用功能检测,因为IE8从技​​术上支持本地存储,但是当页面的文档类型不是HTML5时,则不支持。 Mobile Safari也支持本地存储,但与其他现代浏览器不同。

我可以说这两项检查可以将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);
                }
            }
    }
}
});

注意事项:

  • 每隔3秒就会调用一个函数,该函数使用Ajax将这些数据发布到PHP处理文件中。
  • 有一个称为guid的函数,可生成20个字符的唯一代码。
  • 我们特别需要检查的浏览器:IE8(可能更低)和Mobile Safari(例如,在iPad,iPhone或iPod上)。
  • 在Google Chrome和Firefox中,uuid在当前脚本结构中未定义,而应在本地存储,并使用guid函数生成的字符串。
  • 此代码上方是jQuery 1.8.2(以获得对$ .browser的访问)和jQuery.cookie.js的链接。

您有一个else { if () ,您可能打算拥有else if (){

http://jsfiddle.net/FE2AQ/1/

//$(document).ready(function () { // this isn't really needed
    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);
        }
    }
//});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM