You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

文档存在指定类时设置JS Cookie失败,类匹配逻辑异常排查

问题分析与修复

你的类匹配逻辑失效主要有几个关键问题:

1. 错误使用赋值运算符而非比较运算符

代码里的if(classes = fclass)用了=(赋值),而不是===(严格相等比较)。这会把fclass的值赋给classes,导致这个条件永远为true,但如果元素没有class属性,classes会是null,赋值后会引发异常。

2. 类名匹配方式不合理

用getAttribute('class')获取类名后直接全等比较,无法处理元素有多个类的情况(比如<div class="smcx-iframe-container other-class"></div>),这种情况下类名字符串和目标类名不相等,导致匹配失败。

3. 遍历所有div效率低下

遍历页面所有div元素是没必要的,直接用jQuery选择器定位目标元素更高效。


修正后的代码

(function( $ ) {
    'use strict';
    function setCookie(cname,cvalue,exdays) {
        var d = new Date(); 
        d.setTime(d.getTime() + (exdays*1000*60*60*24)); 
        var expires = "expires=" + d.toGMTString(); 
        window.document.cookie = cname+"="+JSON.stringify(cvalue)+"; "+expires;
    }
    function getCookie(cname) {
        var name = cname + "="; 
        var cArr = window.document.cookie.split(";"); 
        for(var i=0; i<cArr.length; i++) {
            var c = cArr[i].trim();
            if (c.indexOf(name) == 0){ 
                return c.substring(name.length, c.length);
            }    
        }
        return "";
    }
    function deleteCookie(cname) {
        var d = new Date(); 
        d.setTime(d.getTime() - (1000*60*60*24)); 
        var expires = "expires=" + d.toGMTString(); 
        window.document.cookie = cname+"="+"; "+expires;
    }
    $(document).ready(function(){
       setTimeout(function(){
           // 直接用jQuery选择器定位目标元素
           var $targetEle = $(".smcx-iframe-container");
           if($targetEle.length > 0){
               var cookieval = getCookie('device-t-ban');
               if( cookieval === "" ){
                   var fp = new Fingerprint({
                         canvas: true,
                         ie_activex: true,
                         screen_resolution: true
                       });
                   var uid = fp.get();
                   setCookie('device-t-ban',uid,1);  
                   console.log('no cookie!');
                   console.log(getCookie('device-t-ban'));
               }else{
                   $targetEle.html("<div class='tryagain'><p>Try again in 24 hours!</p></div>");
                   console.log('yes cookie!');
                   console.log(getCookie('device-t-ban'));
               }
           } else {
               console.log('class not available');
           }     
       }, 3000);
    });
})( jQuery );   

关键修复点说明

  • 用$(".smcx-iframe-container")直接获取目标元素,通过length判断元素是否存在,避免遍历所有div。
  • 移除了错误的赋值运算符,改用元素存在性判断替代类名直接比较。
  • 修复了未声明的exist变量,改用console.log输出提示。
  • 简化了else if(cookieval != "")为else,逻辑更简洁。

内容的提问来源于stack exchange,提问作者mysticalghoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:57:37