[JS] 静态输出的评论也显示UA

就像本站的本地评论一样。 虽然,本地评论我修改了后台程序,一样存储了评论者 Useragent 。但是除非 JS 方式显示。 不然默认是不会显示的。

原因很简单。 本站解析 UA 是用的这个JS库,而非后台的 Perl 程序。 而本站的本地评论现在显示是动静结合的。 简单的说,每篇文章都是一个静态的HTML页面,定期更新评论在这个页面上。同时JS载入评论,进行判断是否写入静态页面并动态更新之。 显然静态页面解析不可能对 Useragent 字符串进行处理。 而路杨并不像完全对静态评论进行JS替换。。 复杂的的办法就是在后台用 Perl 再写一个解析 UA 的程序出来作为静态HTML的 UA 解析输出。但是 UA 的构造太杂乱了。。。。

今天想了想,其实很简单,还是前段解决吧。 一个 JQ each搞定。 代码如下:

code$("span[rel='ua']").each(function(){  
     if ( $(this).hasClass("done") ) return;       
       var $el = $(this).closest(".comment");
       var _id= $el.attr("data-comment-id"); 
       $(this).replaceWith(tt.show_ua_by_id(_id))
        // $(this).html( tt.show_ua_by_id(_id) ).addClass("done").removeAttr("rel");
});

tt.show_ua_by_id() 代码片段如下:

codeshow_ua_by_id:  function(idx){
  var s = json_data.comments[idx];
  if (!s) return '';  
  if (s.agent) return  tt.show_ua(s.agent);
  return '';    
},

而静态网页在要显示 UA 的位置加入 <span rel="ua"></span> 就一切OK了。

上面的 JS 都是片段, 完整可以查看本站 评论JS:http://static.easunlee.cn/js/new_mt_comments.js

记录下来,给自己备忘。